帖子后无法获得正确的viewbag值

时间:2015-02-12 16:07:40

标签: javascript jquery ajax asp.net-mvc razor

我需要从成功的Ajax帖子中获取记录数。

由于数据类型为" html",我无法通过json检查特定的记录数。

所以,我正在做的是尝试将记录计数应用于ViewBag变量(来自Controller方法)并将其分配给隐藏的html字段,我可以在帖子后检查。如果返回0条记录,我可以向用户显示正确的消息。

我的流程如下:我使用的是MVC 5.2

  1. 在Controller方法的GET中,我设置了ViewBag变量 计数到1(对于测试。理想情况下,它应该为0)。
    1. View将ViewBag变量的值分配给JS变量。
    2. 在POST中,我从检索到的记录中获取记录计数,并将其分配给ViewBag属性。
    3. View再次将ViewBag变量的值赋给JS变量。
    4. 当POST完成时,JS变量检查值是否为0,然后显示正确的消息。
  2. 但是,我遇到的问题是我在GET为1期间设置的初始值,从不更改。

    我在调试期间验证过,当控制器发生POST时,ViewBag属性设置为0(没有返回记录)。我故意将初始值设置为1(在GET中),以查看值是否已更改。

    有人可以告诉我为什么在POST之后JS变量没有被更新为0(上面的步骤4)?

    这是我的代码:

    控制器

    // GET: Customers/CustomerProjects/Details
    public async Task<ActionResult> Details()
            {
                ViewBag.projectCount = "1";
                ViewBag.CustomerEmail = await db.GetCustomerDDLAsync();
    
                return View();
            }
    
    [HttpPost]
            // POST: Customers/CustomerProjects/Details/5
            public async Task<ActionResult> Details(short? id)
            {
                if (id == null)
                {
                    return View("IDIsNull");
                }
                ViewBag.CustomerEmail = await db.GetCustomerDDLAsync();
                Customer customer = await db.GetProjectsByCustomerIDAsync(id);
                if (customer == null)
                {
                    return View("ObjectModelNull");
                }
    
                ViewBag.projectCount = customer.Projects.Count.ToString();
                return View(customer);
            }
    

    VIEW

    @Html.Hidden("projCnt", (string)(ViewBag.projectCount))
    

    JS

    if ($('#projCnt').val() == "0")
    

2 个答案:

答案 0 :(得分:0)

Viewbag仅适用于1个视图,

当您转移到POST时,Viewbag为空。

您可以改用TempData。

查看链接:

Tempdata vs Viewbag...

编辑: 此外,还不是很清楚,也许您在更新ViewBag之前发生了返回视图? (即进入if之一)

答案 1 :(得分:0)

试试这个:

 TempData["projectCount "] = 123;
 TempData.Keep();