所以我有一个ViewBag.Something
,这个数据是随机生成的。在我看来,我将其设置为像@Html.LabelFor(m => m.Something, (string)ViewBag.Something)
这样的标签。这很好,但是当我提交表单时可能会有错误,如果有错误,我需要这个标签保持不变,我不再需要动态/随机数据所以我不会调用生成的控制器方法这个ViewBag。有没有办法保留这个值而不需要在我的控制器中有一些私有变量? MVC / Razor做的一些好方法吗?
答案 0 :(得分:12)
选项1:
使用路由值将“ViewBag.Something”的值传递给Controller:
@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })
选项2: 您可以使用 TempData 。
public ActionResult Index()
{
var Something = "YOURVALUE";
TempData["Something"] = Something;
.......
}
public ActionResult OtherAction()
{
var Something = TempData["Something "];
...........
}
在行动方法之间传递状态
操作方法可能必须将数据传递给另一个操作,例如,如果在发布表单时发生错误,或者方法必须重定向到其他方法,就像用户被定向到登录视图时那样然后回到原来的行动方法。
操作方法可以在调用控制器的RedirectToAction方法调用下一个操作之前将数据存储在控制器的TempDataDictionary对象中。 TempData属性值存储在会话状态中。在设置TempDataDictionary值之后调用的任何操作方法都可以从对象获取值,然后处理或显示它们。 TempData的值一直存在,直到读取或会话超时为止。以这种方式保持TempData可以启用重定向等方案,因为TempData中的值可以在单个请求之外使用。
答案 1 :(得分:1)
在get中,设置一个模型,动态设置它,并在执行return view()
时执行return view(model)
。然后在视图中,设置一个隐藏字段,可以继续传递所需的值。我之所以选择这条路线,是因为我不必担心任何服务器代码可以在帖子上进行此操作,而且我不必担心任何会话。
答案 2 :(得分:-1)
发布后在viewbag中显示消息(我使用此方法)
ActionResult SubmitUser(){
ViewBag.Msg =TempData["Msg"];
return view();
}
[HtttpPost]
ActionResult SubmitUser(){
TempData["Msg"] ="Submitted Successfully"];
return view();
}
将值发送到get方法..