在表单提交上传递整个模型

时间:2013-03-20 15:05:21

标签: asp.net-mvc model form-submit html.hiddenfor

我知道我可以使用@Html.HiddenFor(m => m.parameter),并且在提交表单时,该参数将传递给控制器​​。我的模型有很多属性。

是否有一种较短的方法可以将整个模型一次性传递给控制器​​,还是每次都必须逐个传递?

5 个答案:

答案 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)
{
     // .....
}