在强类型视图中指定模型变量

时间:2012-09-07 20:01:32

标签: asp.net-mvc razor model-binding

我有ModelA模型和强类型视图ViewA,其类型为ModelA。如你所知,如果你声明一个动作说'ActionAPost',签名如下:

[HttpPost]
public ActionResult ActionAPost(ModelA mod) {
  // code
}

在这种情况下,它会将表单上设置的值绑定到ModelA实例mod。我想做这样的事情:

ViewA:

@ModelAInstance.SomeAttr = ViewBag.SomeAttr;

将一些静态值分配给将由后期操作处理的模型属性。

编辑:

该值以前在ViewBang设置。

2 个答案:

答案 0 :(得分:4)

因此在视图中有一个隐藏元素,其中name属性反映了模型和属性的对象路径。这样它会以你想要的方式绑定回你的POST动作

示例:

<input type="hidden" name="SomeAttr" value="@ViewBag.SomeAttr" />

使用Razor和ViewBag

使用razor:

GET请求中设置模型中的值
@Html.Hidden("SomeAttr", (object)ViewBag.SomeAttr);

@Html.HiddenFor(m => m.SomeAttr, new { value = ViewBag.SomeAttr });

答案 1 :(得分:1)

在表单中创建隐藏变量,同名作为ViewModel的属性名称

<input type="hidden" name="SomeAttr" value="@ViewBag.SomeAttr" />

现在,在您的帖子操作中,您可以通过访问SomeAttr属性

来获取此信息
public ActionResult Add(ModelA model)
{
  //check for model.SomeAttr here

}

假设您的模型,ModelA具有SomeAttr属性。 MVC Modelbinding会在发布时将您的输入绑定到模型对象。