2011-10-07 82 views
9

我有一個模型比包含可修改項目的集合。MVC3部分視圖和模型不回發更改

我使用部分視圖渲染集合,部分視圖又使用EditorForModel輸出集合中每個元素的HTML。

@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" /> 
    } 

管窺

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

PlayerModel查看

@model Footy.Models.PlayerModel 

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

這一切都正確呈現,但是當用戶點擊輸入,控制器方法不模型通過子集,例如Model.Team1Players爲空

我錯過了什麼?

編輯:生成的HTML是

<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> 

感謝

我認爲這是與此相關的問題,這還沒有答案:如果檢查所呈現源Posting data back to a controller from a Partial View rendered by Ajax

+0

很難分辨 - 你可以在瀏覽器中查看這個頁面並提交生成的HTML(顯示源代碼或者類似於瀏覽器的東西)? – Carsten

回答

4

,你能否檢查呈現的子模型輸入的名稱和ID是否與模型層次相對應?

我相信你需要EditorFor才能使子模型正確「命名空間」。

所以在EventModel視圖中,使用這樣的事情:

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

但是我不知道。我在MVC框架中遇到過類似的問題。

+1

是的,就是這樣。另外,我必須在部分視圖中爲用戶ID添加一個新的隱藏字段,所以我知道我必須用新狀態更新哪個玩家。偉大的東西 - 謝謝! – Duncan

0

也許問題出在集合綁定。

嘗試閱讀this post。它應該讓你對收集綁定有所瞭解

相關問題