表单提交时传递整个模型

24

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

是否有一种更简洁的方式一次性将整个模型传递到控制器,还是必须每次一个一个地传递?

6个回答

29

整个模型将被传递给控制器,但是那些未被输入或隐藏字段绑定的属性值将会丢失。

你必须在客户端表单中绑定这些属性,或者在服务器端重新获取实体。

你似乎正在寻求类似于@Html.HiddenFor(m => m.Model)的东西,但这是不可能的。抱歉

请记住一件事,如果你有大量的隐藏字段,你可能会向视图发送比你实际需要的数据更多。考虑使用视图模型


4

对于其他人来说,你可以在一个隐藏的div中使用@Html.EditorForModel()。你还需要为模型的每个对象属性使用@Html.EditorFor(model => model.ObjectProperty)。

<div hidden="hidden">
  @Html.EditorForModel()
  @Html.EditorFor(model => model.ObjectProperty)
  @Html.EditorFor(model => model.ListOfObjectsProperty)
</div>

0
@using (Ajax.BeginForm("my_function", "my_controller", new AjaxOptions { InsertionMode = InsertionMode.Replace }, mymodel))

请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么您认为这是最好的方法的解释 - Jeremy Caney

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。但由于您有一个parameter属性的input,因此它将被填充。


0
如果您使用FORM元素,则整个模型将被发布。显然,使用模型的元素需要在表单元素内部。
您也可以通过使用JQuery自己POST表单。
请参阅此其他堆栈问题:jQuery AJAX submit form 仔细查看“Alfrekjv”的答案。

0

您可以仅检查您想要的属性:

if (this.ModelState.IsValidField("Name"))
{
     // .....
}

改为:

if (this.ModelState.IsValid)
{
     // .....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接