Передача всей модели при отправке формы
Я понимаю, что могу использовать @Html.HiddenFor(m => m.parameter)
и когда форма будет отправлена, этот параметр будет передан контроллеру. У моей модели много свойств.
Есть ли более короткий способ передачи всей модели сразу контроллеру, или я должен делать это один за другим каждый раз?
Ответы
Ответ 1
Модель будет передана контроллеру целиком, но значения свойств, которые не связаны входными или скрытыми полями, будут потеряны.
Вы должны либо привязать свойства в форме на стороне клиента, либо повторно выбрать объект на стороне сервера.
Кажется, вы просите что-то вроде @Html.HiddenFor(m => m.Model)
, и это невозможно. сожалею
Помните, что если у вас много скрытых полей, вы можете отправлять больше данных в представление, чем вам действительно нужно. Рассмотрим использование моделей просмотра
Ответ 2
Это уже встроено. Рассмотрим эту модель:
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
он будет заполнен.
Ответ 3
Для всех, кто смотрит на это, вы можете сделать @Html.EditorForModel() в скрытом div. Вам также необходимо использовать @Html.EditorFor(model => model.ObjectProperty) для каждого свойства объекта модели.
<div hidden="hidden">
@Html.EditorForModel()
@Html.EditorFor(model => model.ObjectProperty)
@Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
Ответ 4
Вся модель будет опубликована, если вы используете элемент FORM. Ваши элементы с использованием модели, очевидно, должны находиться внутри элемента формы
Вы также можете использовать POST в своей форме, используя JQuery
См. Эту проблему с другим стеком: jQuery AJAX submit form
Посмотрите внимательно на anwser от "Alfrekjv",
Ответ 5
Вы можете проверить только нужные свойства:
if (this.ModelState.IsValidField("Name"))
{
// .....
}
вместо:
if (this.ModelState.IsValid)
{
// .....
}