Asp MVC3 Custom EditorTemplate для коллекций (пустой или нет) - PullRequest
4 голосов
/ 09 декабря 2010

После долгих поисков, поиска в стеке (?) И чтения блога я все еще не могу полностью решить проблему.Надеюсь, это сообщество экспертов может прийти на помощь!

Дано: Класс компании с полем ICollection (Компания может иметь много адресов).У каждого адреса есть несколько простых строковых полей.

Короткая версия:

Я хочу, чтобы пользователь мог добавить любое количество адресов компании.Сначала я хочу показать один набор текстовых полей адреса, а затем кнопку «Добавить еще один адрес».Javascript не проблема, а часть MVC.Если неясно, функциональность должна быть похожа на эту: http://www.mdelrosso.com/sheepit/index.php?lng=en_GB&sec=demo3

Мне нужно использовать функцию MVC EditorForModel (), что означает, что все конфигурации должны идти в шаблонах редактора.

Состояние такfar:

  • Создан ViewModel для страницы редактирования компании (CompanyViewModel)
  • Добавлен [UIHint ("Addresses")] в поле public ICollection Addresses {get;задавать;}
  • Созданные адреса EditorTemplate

В шаблоне Addresses EditorTemplate при добавлении новой компании переданная модель имеет значение Null (в этом нет ничего удивительного).Как мне создать редактор для дополнительного адреса?Я пробовал несколько воплощений (используя Razor):

@Html.EditorFor(m => new Address());

, но не смог произвести что-либо даже удаленно работающее.(Точная строка выше выдает ошибку: «Шаблоны могут использоваться только с доступом к полям, доступом к свойствам, индексом одноразмерного массива или выражениями настраиваемого индексатора с одним параметром.»)

Спасибо за любые указатели!*

/ Виктор

1 Ответ

4 голосов
/ 09 декабря 2010

Это недостаток текущих API.Один из способов сделать это - создать дочернее действие, отвечающее за создание формы вставки

В вашем контроллере:

[ChildActionOnly]
public ActionResult AddAddress() {
    return View(new Address()); // pass an instance so view works
}

Добавить новое представление AddAddress.cshtml

@model Address
@Html.EditorForModel()

Тогда в вашем редакторе шаблона используйте

@Html.Action("AddAddress")
...