如何在表单发布后保存ViewBag数据?

Pit*_*all 8 asp.net-mvc razor viewbag asp.net-mvc-3

所以我有一个ViewBag.Something,这个数据是随机生成的.在我看来,我把它设置为这样的标签@Html.LabelFor(m => m.Something, (string)ViewBag.Something).这很好,但是当我提交表单时可能会有错误,如果有错误,我需要这个标签保持不变,我不再需要动态/随机数据所以我不会调用生成的控制器方法这个ViewBag.有没有办法保留这个值而不需要在我的控制器中有一些私有变量?MVC/Razor做的一些好方法吗?

Kap*_*wal 12

选项1:

使用路由值将"ViewBag.Something"的值传递给Controller:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })
Run Code Online (Sandbox Code Playgroud)

选项2:您可以使用TempData.

public ActionResult Index()
{
 var Something = "YOURVALUE";
 TempData["Something"] = Something;
.......
}


public ActionResult OtherAction()
{
    var Something = TempData["Something "];
    ...........
}
Run Code Online (Sandbox Code Playgroud)

在行动方法之间传递状态

操作方法可能必须将数据传递给另一个操作,例如,如果在发布表单时发生错误,或者方法必须重定向到其他方法,就像用户被定向到登录视图然后返回到原始的行动方法.

action方法可以在调用控制器的RedirectToAction方法调用下一个操作之前将数据存储在控制器的TempDataDictionary对象中.TempData属性值存储在会话状态中.在设置TempDataDictionary值之后调用的任何操作方法都可以从对象获取值,然后处理或显示它们.TempData的值一直存在,直到读取或会话超时为止.以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用.


Pit*_*all 1

在 get 中,设置一个模型,动态设置它,并在return view()执行时执行return view(model)。然后在视图中,设置一个隐藏字段,可以不断传递所需的值。我选择走这条路是因为我不必担心任何服务器代码来使其在帖子上工作,而且我不必担心任何会话。