Pass an entire model on form submission

2020-06-08 05:34发布

I understand that I can use @Html.HiddenFor(m => m.parameter) and when the form is submitted, that parameter will be passed to the controller. My model has many properties.

Is there a shorter way of passing the entire model at once to the controller or must I do it one by one each time?

5条回答
smile是对你的礼貌
2楼-- · 2020-06-08 05:37

For anyone else who looks at this you can do a @Html.EditorForModel() in a hidden div. You'd also have to use @Html.EditorFor(model => model.ObjectProperty) for each object property of the model.

<div hidden="hidden">
  @Html.EditorForModel()
  @Html.EditorFor(model => model.ObjectProperty)
  @Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
查看更多
我欲成王,谁敢阻挡
3楼-- · 2020-06-08 05:51

This is already built in. Consider this model:

public class MyModel
{
    public string PropertyA { get; set; }
    public string parameter { get; set; }
}

and now consider this action:

[HttpPost]
public ActionResult PostSomeData(MyModel model)
{
}

MVC will leverage the FormCollection and fill in the MyModel class where it can. If you don't have the PropertyA in the form then it will be null. But since you have an input for the parameter property it will be filled in.

查看更多
Juvenile、少年°
4楼-- · 2020-06-08 05:52

The entire model will be posted if you are using a FORM element. Your elements using the Model obviously need to be inside the form element

You can also POST the form yourself say by using JQuery

See this other stack issue for that : jQuery AJAX submit form

Have a close look at the anwser by "Alfrekjv"

查看更多
你好瞎i
5楼-- · 2020-06-08 05:54

The model will be passed to the controller in its entirety, but the values of properties that are not bound by input or hidden fields will be lost.

You have to either bind the properties in the form on the client-side, or re-fetch the entity on the server-side.

You seem to be asking for something like @Html.HiddenFor(m => m.Model), and that is not possible. Sorry

One thing to keep in mind, if you have tons of hidden fields, you may be sending more data to the view than you really need. Consider employing view models

查看更多
ら.Afraid
6楼-- · 2020-06-08 05:55

You can check only the properties you want:

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

instead of:

if (this.ModelState.IsValid)
{
     // .....
}
查看更多
登录 后发表回答