我有ModelA
模型和强类型视图ViewA
,其类型为ModelA
。如你所知,如果你声明一个动作说'ActionAPost',签名如下:
[HttpPost]
public ActionResult ActionAPost(ModelA mod) {
// code
}
在这种情况下,它会将表单上设置的值绑定到ModelA实例mod
。我想做这样的事情:
ViewA:
@ModelAInstance.SomeAttr = ViewBag.SomeAttr;
将一些静态值分配给将由后期操作处理的模型属性。
编辑:
该值以前在ViewBang
设置。
答案 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会在发布时将您的输入绑定到模型对象。