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

时间:2012-06-12 13:26:36

标签: asp.net-mvc asp.net-mvc-3 razor viewbag

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

3 个答案:

答案 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方法..