我知道我可以使用@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))