我知道我可以使用@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>
如果您使用的是 FORM 元素,将发布整个模型。您使用模型的元素显然需要在表单元素内
您还可以使用 JQuery 发布自己说的表单
请参阅其他堆栈问题:jQuery AJAX submit form
仔细查看“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
。但是,由于您有一个input
forparameter
属性,它将被填写。
您只能检查所需的属性:
if (this.ModelState.IsValidField("Name"))
{
// .....
}
代替:
if (this.ModelState.IsValid)
{
// .....
}