2011-02-22 3 views
6

Ok У меня есть мнение то будет сильно типизированных как коллекция MyObjectASP.NET MVC LIST и создать в одном представлении

@model IEnumerable<ViewModels.MyObject> 

I цикл путем сбора, чтобы создать список объектов.

На этой же странице мне нужно создать форму, чтобы добавить новый объект MyObject.

Есть ли способ использовать html-помощники вдоль лямбда-выражений для создания элементов, сильно набранных из моей модели?

или было бы лучше загрузить часть формы этой страницы в виде другого частичного представления, введенного как MyObject (а не коллекция)?

ответ

7

Вы можете создать вид модели с двумя моделями зрения как свойства:

class ListCreateViewModel { 
    ListViewModel ListViewModel { get; set; } 
    CreateViewModel CreateViewModel { get; set; } 
} 

Затем вы можете использовать

Html.RenderPartial("Create", Model.CreateViewModel); 

Ваш парциальное будет CreateViewModel как модель.

Вы также можете сделать совершенно отдельный вид и модель и называют:

Html.RenderAction("Create", "Controller"); 

RenderAction ведет себя как новый запрос и зрения оказывается в другом контексте.

4

Я прокручиваю коллекцию, чтобы создать список объектов.

Зачем вам петля? Зацикливание в глазах уродливое. Вы можете использовать шаблоны редактора:

@model IEnumerable<ViewModels.MyObject> 
@using (Html.BeginForm()) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="Go!" /> 
} 

и внутри соответствующего шаблона редактора, который будет вызываться для каждого элемента коллекции модели (~/Views/Shared/EditorTemplates/MyObject.cshtml):

@model ViewModels.MyObject 
<div> 
    @Html.LabelFor(x => x.Prop1) 
    @Html.TextBoxFor(x => x.Prop1) 
    @Html.ValidationMessageFor(x => x.Prop1) 
</div> 
<div> 
    @Html.LabelFor(x => x.Prop2) 
    @Html.TextBoxFor(x => x.Prop2) 
    @Html.ValidationMessageFor(x => x.Prop2) 
</div> 
... 
+0

вау! не знал, что вы могли бы это сделать в mvc – Baahubali

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