8

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

4

3 回答 3

12

选项1:

使用路由值将“ViewBag.Something”的值传递给控制器​​:

@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 中的值在单个请求之外可用。

于 2012-06-12T13:47:51.450 回答
1

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

于 2012-06-12T18:18:08.320 回答
-1

发布后在 viewbag 中显示消息(我使用此方法)

ActionResult SubmitUser(){

  ViewBag.Msg =TempData["Msg"];

  return view();
}


[HtttpPost]
ActionResult SubmitUser(){

 TempData["Msg"] ="Submitted Successfully"];

  return view();
}

值是发送到获取方法..

于 2016-05-17T12:32:57.853 回答