2012-02-26 6 views
8

Использование редактораДля шаблонов очень приятная функция ASP.Net MVC 3, но возможно ли получить редактор для рендеринга непосещенного шаблона, позволяющего создавать записи?Использование Html.EditorДля создания пустого для новых записей

Или есть ли другой способ сделать это?

Пути, в котором я пытаюсь сделать это следующим образом:

@Html.EditorFor(model => model) 
    @Html.EditorFor(x => new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new Business.ViewModel.Affiliate.Contact()) 

Первое, очевидно, работает, однако последующие (которые демонстрируют, что я пытаюсь сделать) все завершаться следующие ошибка:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

Рассматриваемая модель является:

IEnumerable<Business.ViewModel.Affiliate.Contact> 
+0

Вы можете создать свой собственный шаблон или просто создать переменную для пустой модели на лету: @ {var emptyModel = new Business.ViewModel.Affiliate.Contact();} @ Html.EditorFor (emptyModel) Пока не cleanest, он работает –

ответ

6

Ответственность за подготовку модели представления, которая будет передана в представление, лежит на контроллере. Так что, если вам нужно, например, для инициализации вида вид модели с 5 пустых контактных строк вы можете сделать это просто в контроллере:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     // Add 5 empty contacts 
     Contacts = Enumerable.Range(1, 5).Select(x => new Contact()).ToList() 
    }; 
    return View(model); 
} 

и с вашей точки зрения использовать помощника EditorFor как обычно:

@model MyViewModel 
... 
@Html.EditorFor(x => x.Contacts) 

Это отобразит соответствующий шаблон редактора для каждого из 5 элементов, которые мы добавили в коллекцию Contacts.

+0

Я собираюсь пойти с этим в качестве ответа, так как это решение, которое я использовал в конце, а также его решение, которое имеет наибольший смысл - контроллер должен подготовить точный viewmodel, который требует просмотр , – Moo

+0

Я ПРОПУСТИТЬ ДНИ ИСКАТЬ ПОЧЕМУ МОЙ ШАБЛОН РЕДАКТОРА НЕ ОКАЗЫВАЕТ! ВЫКЛЮЧАЕТ, ВЫ НЕ МОЖЕТЕ ПОЛУЧИТЬ НУЛЬ! –

0

Если ваш вопрос не связано с AJAX, то я хотел бы разработать ViewModel следующим образом:

class MyList 
{ 
    public List<MyRow> Rows {get;set;} 
    public MyRow NewRow {get;set;} 
} 

Затем вы можете легко добавить пустой редактор, связанный с NewRow собственности. А в контроллере вы добавляете NewRow к строкам при последующих вызовах.

Смежные вопросы