【问题标题】:@Viewbag gives null value the first time used@Viewbag 第一次使用时给出空值
【发布时间】:2020-12-31 14:50:09
【问题描述】:

好的,问题是我试图从带有 <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"]))
})

谁能帮帮我???

【问题讨论】:

  • 看起来您仅将 TempData 值放置在 HttpPost 操作中,但第一次页面由 HttpGet 呈现。您能否在它们中设置刹车点并检查第一次和第二次使用的操作。

标签: c# html jquery asp.net-mvc


【解决方案1】:

第一次加载页面时,它会在您的操作方法Home_Page 上触发一个操作动词 HttpGet。换句话说,您需要一个HttpGet 操作方法,以便当您触发您在上面的代码中发布的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),那么它们必须有不同的参数声明,这样编译器就不会认为它有歧义。所以在这种情况下,在我的示例中,我没有声明任何参数。

【讨论】:

  • 您好,感谢您的回答。我试过你说的。但这次我得到的第一个值是 0,之后的任何值都为 null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2016-07-15
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多