2011-02-22 14 views
6

Ok ho una visione questo è è fortemente tipizzato come una raccolta di MyObjectASP.NET MVC LIST e Crea in stessa vista

@model IEnumerable<ViewModels.MyObject> 

I ciclo attraverso la collezione per creare un elenco degli oggetti.

Nella stessa pagina devo creare il modulo per aggiungere un nuovo oggetto MyObject.

C'è un modo per utilizzare gli helper Html lungo le espressioni lambda per creare elementi fortemente digitati dal mio modello?

o sarebbe meglio caricare la parte Form di questa pagina come un'altra vista parziale digitata come MyObject (non una raccolta)?

risposta

7

È possibile creare vista del modello con due modelli vista come proprietà:

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

quindi è possibile utilizzare

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

tuo parziale avrà CreateViewModel come modello.

È possibile anche fare vista totalmente separata e il modello e chiamare:

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

RenderAction si comporta come nuova richiesta e vista è reso in un contesto diverso.

4

I loop attraverso la raccolta per creare un elenco degli oggetti.

Perché loop? Andare in una vista è brutto. È possibile utilizzare Editor modelli:

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

e all'interno del template editor di corrispondente che verrà richiamato per ogni elemento della collezione del modello (~/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! non avevo idea che potessi farlo in mvc – Baahubali

Problemi correlati