首页 > 解决方案 > @Viewbag 第一次使用时给出空值

问题描述

好的,问题是我试图从视图中获取一个值<form method=" post">,然后将其带到控制器并对其进行一些数学运算,然后使用 Tempdata 将其重新发送到视图。问题是,我第一次尝试使用它时,我得到一个空值,但是当网站重新加载时,我第二次得到我输入的最后一个值的值:

控制器:

[HttpPost]
public ActionResult Home_Page(FormCollection frm)
{
    int firstnumber = Convert.ToInt32(frm["firstnumber"]);
    int secondnumber = Convert.ToInt32(frm["secondnumber"]);
    TempData["secondnumber"] = secondnumber;
    TempData.Keep();
    //int differenceresult = firstnumber - secondnumber;
    //int sumresult = firstnumber + secondnumber;
    //ViewBag.differenceresult = differenceresult;
    //ViewBag.sumresult = sumresult;

    return View();
}

看法:

$("#btnsum").click(function () {
    alert(@Html.Encode(@TempData["secondnumber"]))
})

谁能帮我???

标签: c#htmljqueryasp.net-mvc

解决方案


第一次加载页面时,它会触发HttpGetAction Method 上的 Action Verb Home_Page。换句话说,您需要一个HttpGetAction 方法,以便当您触发您HttpPost在上面的代码中发布的内容时,它会正确声明您的 TempData 变量。这是我可以为您提供的示例:

[HttpGet]
public ActionResult Home_Page()
{
  int firstnumber = Convert.ToInt32(frm["firstnumber"]);
  int secondnumber = Convert.ToInt32(frm["secondnumber"]);
  TempData["secondnumber"] = secondnumber;
  TempData.Keep();
  return View();
}

如果你的两个动作名称相同,但动作动词不同(HttpGet、HttpPost),那么它们必须有不同的参数声明,这样编译器就不会认为它有歧义。所以在这种情况下,在我的例子中,我没有声明任何参数。


推荐阅读