将变量从视图传递到控制器操作方法,然后传递到同一 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,而是先将它传递给另一个方法。
谢谢。
您可以使用 ViewData
或 TempData
将您的变量从一个控制器操作保存到另一个控制器操作:
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();
}
当客户下订单时,我的一个视图从 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,而是先将它传递给另一个方法。
谢谢。
您可以使用 ViewData
或 TempData
将您的变量从一个控制器操作保存到另一个控制器操作:
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();
}