我有一个包含多个部分视图的页面。每个包含一个Ajax.BeginForm,并且都发布到同一个控制器以执行各种查找。 ActionResult返回一个我需要存储的值,以便在同一页面上的另一个ActionResult中使用,同一个控制器。
我已经尝试过TempData,ViewBag,ViewData,但是没有传递该值。
我有一个典型的控制器动作:
public ActionResult ExistingLogin(AMSIdentifyInputModel_ExistingLogin model)
{
if (ModelState.IsValid)
{
int? entityNumber = (from s in statebarDB.IMail
where s.USERID == model.oldUsername
&& s.PASSWORD == model.oldPassword
select s.ENTITY_NUMBER).FirstOrDefault();
if (entityNumber != null && entityNumber != 0)
{
ViewData["entityNumber"] = entityNumber;
return Json(new { result = 1, message = "User found." });
}
}
}
另一个部分视图提交给不同的操作并尝试读取该entityNumber但没有成功:
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult CreateAccount(AMSIdentify_RegisterInputModel model)
{
if (ModelState.IsValid)
{
this.userAccountService.UpdateEntityID(account, (int)ViewData["entityNumber"]);
. . .
是否有其他方法可以临时存储视图的值?
答案 0 :(得分:0)
假设entityNumber只是一个ID,而不是一个非常重要的安全漏洞或巨大的千兆字节数:
分配:
Session["entityNumber"] = entityNumber;
参考:
(int)Session["entityNumber"];
答案 1 :(得分:0)
还有两种其他方式可以以临时方式在前端存储数据。 1.您可以使用HTML5使用javascript或JQuery提供的 LocalStorage 功能。 2.您可以将值存储在模型值中,并且在执行时,可以在javascript端将值与变量一起传递。
在后端,在页面加载时会加载TempData,ViewBag,ViewData,因此它们无法根据我们的需要进行更改。
因此,如果您需要在后端使用它,我们可以使用 Session 。 您也可以使用 Cookies 。