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



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

是否有一种更短的方式将整个模型一次传递给控制器,或者我必须每次一个接一个地进行?

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

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

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

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

对于其他人谁看这个,你可以做一个@Html. editorformodel()在一个隐藏的div。你也必须使用@Html。EditorFor(model => model. objectproperty)用于模型的每个对象属性。

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

如果您使用的是FORM元素,则整个模型将被张贴。使用Model的元素显然需要位于表单元素

你也可以自己POST表单,比如使用JQuery

参见其他堆栈问题:jQuery AJAX提交表单

仔细看看"Alfrekjv"的答案

这已经是内置的。考虑这个模型:

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,所以它会被填充。

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

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

代替:

if (this.ModelState.IsValid)
{
     // .....
}
@using (Ajax.BeginForm("my_function", "my_controller", new AjaxOptions { InsertionMode = InsertionMode.Replace }, mymodel))

相关内容

  • 没有找到相关文章