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

Pass a variable from a view to a controller action method and then to another method in the same ASP.NET MVC controller

当客户下订单时,我的一个视图从 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.
}

我希望能够在那里创建一个视图包,以便我可以将令牌的值传递给 GetTokenFromView JSON 结果之后的 ActionResult,即 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();
}

我创建的用于传递令牌的视图包在我们输入“Thankyou”操作结果后不再具有值。所以我没有办法再参考了。

有什么方法可以更好地传递那段数据。甚至可以将它从视图传递到控制器而不必使用 ajax ?

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

谢谢。

您可以使用 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();
}