ASP.NET MVC LIST et Create dans la même vue

Ok j’ai une vue qui est fortement typée comme une collection de MyObject

@model IEnumerable 

Je parcours la collection pour créer une liste des objects.

Sur la même page, je dois créer un formulaire pour append un nouvel object MyObject.

Existe-t-il un moyen d’utiliser des aides HTML avec des expressions lambda pour créer des éléments fortement typés à partir de mon modèle?

Ou serait-il préférable de charger la portion Formulaire de cette page sous une autre vue partielle typée MyObject (pas une collection)?

Vous pouvez créer un modèle de vue avec deux modèles de vue en tant que propriétés:

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

Ensuite, vous pouvez utiliser

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

Votre partiel aura CreateViewModel comme modèle.

Vous pouvez également créer une vue totalement séparée, modéliser et appeler:

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

RenderAction se comporte comme une nouvelle demande et la vue est rendue dans un contexte différent.

Je parcours la collection pour créer une liste des objects.

Pourquoi faites-vous une boucle? Boucler dans une vue est moche. Vous pouvez utiliser des modèles d’éditeur:

 @model IEnumerable @using (Html.BeginForm()) { @Html.EditorForModel()  } 

et à l’intérieur du modèle d’éditeur correspondant qui sera appelé pour chaque élément de la collection de modèles ( ~/Views/Shared/EditorTemplates/MyObject.cshtml ):

 @model ViewModels.MyObject 
@Html.LabelFor(x => x.Prop1) @Html.TextBoxFor(x => x.Prop1) @Html.ValidationMessageFor(x => x.Prop1)
@Html.LabelFor(x => x.Prop2) @Html.TextBoxFor(x => x.Prop2) @Html.ValidationMessageFor(x => x.Prop2)
...