我知道可以使用@Html.HiddenFor(m => m.parameter)
,当表单提交时,该参数将传递给控制器。我的模型有许多属性。
是否有一种更简洁的方式一次性将整个模型传递到控制器,还是必须每次一个一个地传递?
我知道可以使用@Html.HiddenFor(m => m.parameter)
,当表单提交时,该参数将传递给控制器。我的模型有许多属性。
是否有一种更简洁的方式一次性将整个模型传递到控制器,还是必须每次一个一个地传递?
整个模型将被传递给控制器,但是那些未被输入或隐藏字段绑定的属性值将会丢失。
你必须在客户端表单中绑定这些属性,或者在服务器端重新获取实体。
你似乎正在寻求类似于@Html.HiddenFor(m => m.Model)
的东西,但这是不可能的。抱歉
请记住一件事,如果你有大量的隐藏字段,你可能会向视图发送比你实际需要的数据更多。考虑使用视图模型
对于其他人来说,你可以在一个隐藏的div中使用@Html.EditorForModel()。你还需要为模型的每个对象属性使用@Html.EditorFor(model => model.ObjectProperty)。
<div hidden="hidden">
@Html.EditorForModel()
@Html.EditorFor(model => model.ObjectProperty)
@Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
@using (Ajax.BeginForm("my_function", "my_controller", new AjaxOptions { InsertionMode = InsertionMode.Replace }, mymodel))
这已经内置了。考虑使用这个模型:
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)
{
// .....
}