C# ASP.NET MVC 4 ViewBag值仅增加一次

C# ASP.NET MVC 4 ViewBag值仅增加一次,c#,asp.net-mvc-4,razor,viewbag,C#,Asp.net Mvc 4,Razor,Viewbag,嘿 我有一个非常有趣的问题。我有一个按钮,如果用户单击该按钮,它将重新加载该页面,增加viewbag中存储的值并将其写入屏幕。当用户点击按钮时,数字的值只增加了一次,我不知道为什么。代码非常简单: 控制员: public ActionResult Index() { ViewBag.number= 0; return View(); } [HttpPost] public ActionResult Index(int number) {

我有一个非常有趣的问题。我有一个按钮,如果用户单击该按钮,它将重新加载该页面,增加viewbag中存储的值并将其写入屏幕。当用户点击按钮时,数字的值只增加了一次,我不知道为什么。代码非常简单:

控制员:

public ActionResult Index()
{
         ViewBag.number= 0;
         return View();
}

[HttpPost]
public ActionResult Index(int number)
{
            ViewBag.number= number;
           return View();
}
观点:

@{

    int number= ViewBag.number;
    number++;

}
@using (Html.BeginForm("Index","Default", FormMethod.Post))
{
    @Html.Hidden("number",number)
    @Html.Display("number",number);
    <input type="submit" value="Ok" />
}
@{
int number=ViewBag.number;
数字++;
}
@使用(Html.BeginForm(“Index”,“Default”,FormMethod.Post))
{
@隐藏(“数字”,数字)
@显示(“数字”,数字);
}

谢谢你的回复!:)

ViewBag应用于将数据从控制器传递到视图(动态替代ViewData)。要在请求之间存储数据,请使用会话或TempData我看不出您的代码有任何问题

然而,如果您在下面的视图中替换代码,我认为这应该可以工作

@using (Html.BeginForm("Index","Home", FormMethod.Post))
{

    <input type="hidden" name="number" value="@number" />
    @Html.Display("number", number)
    <input type="submit" value="Ok" />
}
@使用(Html.BeginForm(“Index”,“Home”,FormMethod.Post))
{
@显示(“数字”,数字)
}

但不确定Html.Hidden和直接写入输入标记之间有什么区别。

ViewBag的作用域将限定为请求。ViewBag不能这样做,因为ViewBag只用于共享一个请求的数据。您可以尝试使用SessionObject。乍一看,代码似乎很可靠。没有理由不能以这种方式使用ViewBag。若要在请求之间存储数据,请使用session或TempData谢谢大家的快速帮助!:)我正在使用TempData[“number”]并且它正在工作!:)