2011-10-07 9 views
9

Ho un modello che contiene una raccolta di elementi che è possibile modificare.MVC3 Visualizzazione parziale e modello che non postano le modifiche precedenti

Rendo la raccolta utilizzando una vista parziale, che a sua volta utilizza EditorForModel per generare l'HTML per ciascun elemento nella raccolta.

@model Footy.Models.EventModel 

    <h2>@Model.Team1Name vs @Model.Team2Name</h2> 
    @using (Html.BeginForm("Index", "Event")) 
    { 
     @Html.HiddenFor(m => m.EventID) 
     <h1> 
      Team 1 Squad</h1> 
     @Html.Partial("EventPlayers", Model.Team1Players); 
     <h1> 
      Team 2 Squad</h1> 
    Html.RenderPartial("EventPlayers", Model.Team2Players); 

     <input type="submit" value="Confirm Changes" /> 
    } 

Vista parziale

@model IEnumerable<Footy.Models.PlayerModel> 
@Html.EditorForModel() 

PlayerModel View

@model Footy.Models.PlayerModel 

@Model.PlayerName @Html.DropDownListFor(p => p.ParticipationStatusID, new SelectList(Model.ParticipationTypes, "Key", "Value")) 

Tutto rende in modo corretto, ma quando l'utente fa clic l'ingresso, il metodo di controllo non viene passata la collezione bambino nel modello , per esempio Model.Team1Players è null

Cosa mi manca?

EDIT: HTML generato è

<form action="/Footy/Event/Index/1" method="post"><input data-val="true" data-val-number="The field EventID must be a number." data-val-required="The EventID field is required." id="EventID" name="EventID" type="hidden" value="1" />    
<h1>Team 1 Squad</h1> 
     si <select data-val="true" data-val-number="The field ParticipationStatusID must be a number." data-val-required="The ParticipationStatusID field is required." name="[0].ParticipationStatusID"><option value="1">Team</option> 
    <option value="2">Sub</option> 
    <option value="3">Squad</option> 
    </select> 
    <h1>Team 2 Squad</h1> 
<input type="submit" value="Confirm Changes" /> 
</form> 

Grazie

penso che è legato a questa domanda, che ancora non ha una risposta: Posting data back to a controller from a Partial View rendered by Ajax

+0

difficile da dire - puoi andare a vedere questa pagina nel tuo browser e inviare l'HTML generato (mostra la sorgente o qualcosa di simile nel tuo browser)? – Carsten

risposta

4

Se si controlla la fonte reso , puoi verificare che i nomi e gli id ​​degli input del modello figlio renderizzati corrispondano alla gerarchia del modello?

Credo che sia necessario il numero EditorFor affinché i modelli figlio siano correttamente "namespace".

Così nella vista EventModel, usare qualcosa di simile a questo:

@Html.EditorFor(m => m.Team1Players, "EventPlayers") 

Non sono sicuro però. Ho avuto problemi simili con il framework MVC.

+1

Sì, era così. Inoltre ho dovuto aggiungere un nuovo campo nascosto nella vista parziale per l'ID utente, quindi sapevo quale lettore dovevo aggiornare con il nuovo stato. Grandi cose - grazie! – Duncan

0

Forse il problema è nel binding della collezione.

Prova a leggere this post. Dovresti darti qualche informazione sulla collezione vincolante

Problemi correlati