如何在控制器操作之间传递值

时间:2014-08-05 22:28:07

标签: ajax asp.net-mvc asp.net-mvc-partialview tempdata

我有一个包含多个部分视图的页面。每个包含一个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"]);
. . .

是否有其他方法可以临时存储视图的值?

2 个答案:

答案 0 :(得分:0)

假设entityNumber只是一个ID,而不是一个非常重要的安全漏洞或巨大的千兆字节数:

分配:

Session["entityNumber"] = entityNumber;

参考:

(int)Session["entityNumber"];

答案 1 :(得分:0)

还有两种其他方式可以以临时方式在前端存储数据。 1.您可以使用HTML5使用javascript或JQuery提供的 LocalStorage 功能。 2.您可以将值存储在模型值中,并且在执行时,可以在javascript端将值与变量一起传递。

在后端,在页面加载时会加载TempData,ViewBag,ViewData,因此它们无法根据我们的需要进行更改。

因此,如果您需要在后端使用它,我们可以使用 Session 。 您也可以使用 Cookies