2011-02-22 30 views
6

Ok tengo una vista eso es fuertemente tipado como una colección de MiObjetoASP.NET MVC LISTA y crear en la misma vista

@model IEnumerable<ViewModels.MyObject> 

bucle I a través de la colección para crear una lista de los objetos.

En la misma página, necesito crear un formulario para agregar un nuevo MyObject.

¿Hay alguna manera de utilizar helpers Html junto con expresiones lambda para crear elementos fuertemente tipados de mi modelo?

o sería mejor cargar la parte del formulario de esta página como otra vista parcial escrita como MyObject (no una colección)?

Respuesta

7

Puede crear vista del modelo con dos modelos de vista como propiedades:

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

continuación, puede utilizar

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

Su parcial tendrá CreateViewModel como modelo.

También se puede hacer la vista y el modelo totalmente independiente y llamar:

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

RenderAction se comporta como nueva solicitud y la vista se prestan en un contexto diferente.

4

Reviso la colección para crear una lista de los objetos.

¿Por qué haces loop? Looping en una vista es feo. Se podría utilizar plantillas de edición:

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

y dentro del editor de plantillas correspondiente que será invocado para cada elemento de la colección del modelo (~/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

wow! no tenía idea de que podría hacer esto en mvc – Baahubali

Cuestiones relacionadas