Передайте всю модель при отправке формы
Я понимаю, что я могу использовать @Html.HiddenFor(m => m.parameter)
и когда форма отправлена, этот параметр будет передан в контроллер. У моей модели много свойств.
Есть ли более короткий способ передачи всей модели сразу на контроллер, или я должен делать это один за другим каждый раз?
6 ответов
Модель будет полностью передана контроллеру, но значения свойств, которые не связаны входными или скрытыми полями, будут потеряны.
Вы должны либо связать свойства в форме на стороне клиента, либо повторно извлечь объект на стороне сервера.
Вы, кажется, просите что-то вроде @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>
Это уже встроено. Рассмотрим эту модель:
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
для parameter
собственность будет заполнена.
Вы можете проверить только те свойства, которые вы хотите:
if (this.ModelState.IsValidField("Name"))
{
// .....
}
вместо:
if (this.ModelState.IsValid)
{
// .....
}
Вся модель будет опубликована, если вы используете элемент FORM. Ваши элементы, использующие модель, должны находиться внутри элемента формы.
Вы также можете POST форму сказать, используя JQuery
Посмотрите эту другую проблему стека для этого: JQuery AJAX отправить форму
Внимательно посмотрите на ответ от "Alfrekjv"
@using (Ajax.BeginForm("my_function", "my_controller", new AjaxOptions { InsertionMode = InsertionMode.Replace }, mymodel))