我知道我可以使用@Html.HiddenFor(m => m.parameter)
,并且在提交表单时,该参数将传递给控制器。我的模型有很多属性。
是否有一种较短的方法可以将整个模型一次性传递给控制器,还是每次都必须逐个传递?
答案 0 :(得分:23)
模型将完整地传递给控制器,但不受输入或隐藏字段约束的属性值将丢失。
您必须在客户端绑定表单中的属性,或者在服务器端重新获取实体。
你似乎要求像@Html.HiddenFor(m => m.Model)
这样的东西,这是不可能的。遗憾
要注意的一件事是,如果您有大量隐藏字段,您可能会向视图发送比您真正需要的更多数据。考虑使用视图模型
答案 1 :(得分:2)
对于任何看过这个的人,你可以在一个隐藏的div中做一个@ Html.EditorForModel()。您还必须为模型的每个对象属性使用@ Html.EditorFor(model => model.ObjectProperty)。
<div hidden="hidden">
@Html.EditorForModel()
@Html.EditorFor(model => model.ObjectProperty)
@Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
答案 2 :(得分:0)
如果您使用的是FORM元素,则会发布整个模型。使用Model的元素显然需要在表单元素
中您也可以使用JQuery
自行发布表单请参阅此其他堆栈问题:jQuery AJAX submit form
通过“Alfrekjv”仔细观察anwser
答案 3 :(得分:0)
这已经内置。请考虑以下模型:
public class MyModel
{
public string PropertyA { get; set; }
public string parameter { get; set; }
}
现在考虑一下这个动作:
[HttpPost]
public ActionResult PostSomeData(MyModel model)
{
}
MVC将利用FormCollection
并尽可能填写MyModel
类。如果表单中没有PropertyA
,那么它将是null
。但是,由于input
属性有parameter
,因此会填写。{/ p>
答案 4 :(得分:0)
您只能检查所需的属性:
if (this.ModelState.IsValidField("Name"))
{
// .....
}
而不是:
if (this.ModelState.IsValid)
{
// .....
}