Привязка родительской модели ASP.Net MVC3
У меня есть частичный шаблон, который использует объект пользователя в качестве модели. У пользователя есть коллекция Аккаунтов. На этом частичном шаблоне у меня есть цикл следующим образом. Частичный шаблон _Account привязан к классу Account
@foreach (var item in Model.Accounts)
{
<tr>
<td colspan="6">
<div>
@Html.Partial("_Account", item)
</div>
</td>
</tr>
}
В моем методе контроллера я изначально пытался
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UserDetails(User user, string actionType)
Но коллекция User.Accounts пуста. Тогда я попробовал это. Тем не менее коллекция учетных записей пуста.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UserDetails(User user,
[Bind(Prefix="User.Accounts")]
FixupCollection<Account> Accounts,
string actionType)
Могу ли я использовать реализацию Modelbinder по умолчанию для достижения этого или мне нужно сделать что-то другое?
2 ответа
Да, вы можете использовать связыватель модели по умолчанию. Вам просто нужно правильно назвать свои поля. Так что вам нужен ваш цикл для вывода чего-то вроде этого:
...
<input type="text" name="user.Accounts[0].SomeTextField" />
<input type="text" name="user.Accounts[0].SomeOtherTextField" />
...
<input type="text" name="user.Accounts[1].SomeTextField" />
<input type="text" name="user.Accounts[1].SomeOtherTextField" />
...
Если вам нужно добавить / удалить учетные записи, жестко закодированные индексы становятся немного сложнее. Вы можете переназначить имена, используя JavaScript перед постбэком. Но это все возможно. Этот вопрос дает более подробную информацию о привязке модели:
Используйте шаблоны редактора вместо частичного представления - не нужно жестко кодировать ваши индексы, так как шаблон будет автоматически индексировать все ваши объекты правильно, даже когда вы добавляете и удаляете учетные записи. Смотрите мой ответ на этот вопрос:
Передать значения из нескольких частичных представлений
Небольшая статья о редакторе шаблонов здесь: