Ответ 1
Если вы ссылаетесь на привязку к модели, для нее не требуются помощники, но соглашение об именах. Помощники просто упрощают и упрощают создание разметки HTML.
Вы можете создать простые входы HTML и правильно установить атрибут name
. Соглашение об именовании по умолчанию имеет только точку, опускающее имя объекта родительского уровня, но отбирающее его оттуда.
Рассмотрим этот контроллер:
public class MyControllerController : Controller
{
public ActionResult Submit()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Submit(MyViewModel model)
{
// model should be not null, with properties properly initialized from form values
return View(model);
}
}
И эта модель:
public class MyNestedViewModel
{
public string AnotherProperty { get; set; }
}
public class MyViewModel
{
public MyViewModel()
{
Nested = new MyNestedViewModel();
}
public string SomeProperty { get; set; }
public MyNestedViewModel Nested { get; set; }
}
Вы можете создать следующую форму только в HTML:
<form method="POST" action="MyController/Submit">
<div><label>Some property</label><input type="text" name="SomeProperty" /></div>
<div><label>Another property</label><input type="text" name="Nested.AnotherProperty" /></div>
<button type="submit">Submit</button>
</form>
Если вы хотите отобразить опубликованные значения (во второй перегрузке Submit
), ваш HTML должен быть изменен, чтобы отобразить свойства модели. Вы разместили бы это в представлении, в данном случае используя синтаксис Razor и называемый Submit.cshtml
:
@model MyViewModel
<form method="POST" action="MyController/Submit">
<div><label>Some property</label><input type="text" name="SomeProperty" value="@Model.SomeProperty" /></div>
<div><label>Another property</label><input type="text" name="Nested.AnotherProperty" value="@Model.Nested.SomeProperty" /></div>
<button type="submit">Submit</button>
</form>
Итак, это можно сделать без помощников, но вы хотели бы использовать их как можно больше.