2016-01-15 161 views
3

我遇到了HTML幫助程序BeginCollectionItem的問題。它似乎將該項目綁定到視圖上,但變化並未傳播。ASP.NET MVC BeginCollectionItem問題

我有局部視圖,綁定到它的模型是IEnumerable。下面是一個片段。

<tbody> 
    @foreach (var entry in Model) { 
     <tr> 
      @using (Html.BeginCollectionItem("EditedEntries")) { 
       <td>@entry.Storeid</td> 
       <td>@entry.district</td> 
       <td>@Html.EditorFor(x => entry.AdjHrs)</td> 
      } 
     </tr> 
    } 
</tbody> 

如果我刪除了它的工作原理foreach,但是我需要使用foreach因爲集合返回從表和它的成員一起Ajax調用的局部視圖。

+0

這裏看看HTTP更換foreach環://stackoverflow.com/questions/8568160/steve-sandersons-begincollectionitem-helper-wont-bind-correctly – lyz

回答

2

BeginCollectionItem設計用於處理局部視圖。爲你的模型創建一個(我會承擔其命名爲MyModel和你的名字的部分"_MyModel.cshtml"

@model MyModel 
<tr> 
    @using (Html.BeginCollectionItem("EditedEntries")) 
    { 
     <td>@Html.DisplayFor(m => m.Storeid)</td> 
     <td>@Html.DisplayFor(m => m.district)</td> 
     <td>@Html.EditorFor(m => m.AdjHrs)</td> 
    } 
</tr> 

,然後在你的其他部分,與

<tbody> 
    @foreach (var entry in Model) 
    { 
     @Html.Partial("_MyModel", entry) 
    } 
</tbody> 
+0

是的,我不能這樣做,因爲該列表沒有填充,直到部分被加載和呈現。因此,這種說法的原因是局部的。 –

+0

您需要再次閱讀我的答案。你目前的部分包含一個集合,而'foreach'循環調用'_MyModel.cshtml'部分 –

+0

對不起,這是一個漫長的一天,我誤解了。感謝您的幫助。 –

0

所以我設法找到問題的原因。 HTML助手試圖變得聰明並自動生成與數據關聯的隱藏字段的ID和名稱。

什麼產生

<tr role="row" class="odd"> 
<input type="hidden" name="EditedEntries.index" autocomplete="off" value="a2a18da0-528f-4b10-92c1-4a8ba7038dde"> 
    <td class="sorting_1">1</td> 
    <td>1</td> 
    <td> 
     <input data-val="true" data-val-number="The field AdjHrs must be a number." data-val-required="The AdjHrs field is required." 
     id="EditedEntries_a2a18da0-528f-4b10-92c1-4a8ba7038dde__entry_AdjHrs" name="EditedEntries[a2a18da0-528f-4b10-92c1-4a8ba7038dde].entry.AdjHrs" type="text" value="0"> 
    </td> 

它需要什麼是

<tr role="row" class="odd"> 
<input type="hidden" name="EditedEntries.index" autocomplete="off" value="a2a18da0-528f-4b10-92c1-4a8ba7038dde"> 
    <td class="sorting_1">1</td> 
    <td>1</td> 
    <td> 
     <input data-val="true" data-val-number="The field AdjHrs must be a number." data-val-required="The AdjHrs field is required." 
     id="EditedEntries_a2a18da0-528f-4b10-92c1-4a8ba7038dde_AdjHrs" name="EditedEntries[a2a18da0-528f-4b10-92c1-4a8ba7038dde].AdjHrs" type="text" value="0"> 
    </td> 

所以前綴標識符與該 '的foreach' 我可以的變量名不得不寫我自己的幫手。我會在回覆時回覆。