Передача всей модели при отправке формы

Я понимаю, что могу использовать @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)
{
     // .....
}