将变量从视图传递给控制器操作方法,然后传递给同一ASP.NET MVC控制器中的另一个方法



当客户下订单时,我的一个视图从API获得一个令牌。我想将该令牌变量传递给控制器中的操作方法。一旦它到达那个动作方法,我需要将它传递给同一控制器内的另一个方法。我该如何做到这一点?

这就是我到目前为止的看法:

<script type="text/javascript">
document.addEventListener('jrig.begin', function () {

jrig.events.on('bag.confirmed', (bagConfirmResponse) => {

console.log('This is the token number: ' + bagConfirmResponse.token);
                     
//Go to the thank you page
var url = '/purchase/thank-you/order/' + bagConfirmResponse.token;
var bagConfirmResponsetoken = bagConfirmResponse.token;
//Testing passing the token variable to the PurchaseController.cs
$.ajax({
type: "POST",
url: "/Purchase/GetTokenFromView",
data: '{Token: ' + JSON.stringify(bagConfirmResponsetoken) + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",

});
window.location.href = url;
});
});    
</script>

然后,一旦令牌变量到达PurchaseController,它就会被传递到下面的JsonResult

public JsonResult GetTokenFromView(string Token)
{
ViewBag.PassedToken = Token;
return Json(Token);
// I have tried redirectToAction as well but the value becomes null.
}

我希望能够在那里创建一个视图包,这样我就可以将令牌的值传递给GetTokenFromViewJSON结果之后的ActionResult;谢谢你;。

public ActionResult Thankyou(string slug, string Token, string email)
{
slug = "thank-you";
Console.Write(Token);
//Token = ViewBag.PassedToken;
var savedToken = Token;
Console.Write(savedToken);
var url = "https://application.ecomapi.com/api/purchases/" + savedToken;
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
return View();
}

我创建的用于传递令牌的视图包,一旦我们进入";谢谢"行动结果。所以我再也没有办法引用它了。

有没有一种方法可以让我更好地传递这段数据。甚至可以在不使用ajax的情况下将它从视图传递到控制器?

我曾尝试将它直接从视图传递到thankyou方法,但当我这样做时,一旦程序到达需要调用该令牌的位置,它就会将值清空。在调试过程中,它从JsonResult GetTokenFromView来回跳转到ActionResult Thankyou,最终在我需要时再次将值设为null,所以我想我不会直接从视图传递它来表示感谢,而是先将它传递给另一个方法。

谢谢。

您可以使用ViewDataTempData将变量从一个控制器操作持久化到另一个:

public JsonResult GetTokenFromView(string Token)
{
ViewData["PassedToken"] = Token;
return Json(Token);
// I have tried redirectToAction as well but the value becomes null.
}

并在Thankyou方法中访问它,如下所示:

public ActionResult Thankyou(string slug, string Token, string email)
{
slug = "thank-you";
Console.Write(Token);
//Token = ViewBag.PassedToken;
//Get your ViewData variables here
if (ViewData["PassedToken"] != null)
{
Token=ViewData["PassedToken"];
}
var savedToken = Token;
Console.Write(savedToken);
var url = "https://application.ecomapi.com/api/purchases/" + savedToken;
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
return View();
}

最新更新