2012-01-12 77 views
10

模型綁定IEnumerable類型到MVC POST是否存在任何問題?在ASP.NET MVC POST中綁定IEnumerable?

我的模型中的一些屬性未綁定到操作的帖子上。似乎像字符串模型的屬性是好的,但我的IEnumerable是沒有被綁定。

這裏是我的代碼片段:

<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.Test) %> 
    <% for (int i = 0; i < Model.ResponseInfo.SubsetInfo.BandAvailabilities.Count(); i++) 
    {%> 
     <%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %> 
    <% } %> 

這裏是什麼這些屬性看起來像模型:

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; } 
public string Test { get; set; } 

視圖工作正常,並輸出與預期的文本框列表在他們的價值。但是被觸發的後置操作只能將測試字符串識別爲屬性。模型狀態也不包含我的IEnumerable數據。

+0

辦理儘管被downvoted,我真的希望有人誰也有類似的問題過這個問題絆倒,並得到了更好地洞察問題... – Arkiliknam 2012-01-20 08:14:06

+0

我不確定..爲什麼很多好問題都是沒有解釋的downvoted ....我偶然發現這一點,發現有用的。謝謝。 – 2012-03-27 02:30:17

回答

8

模型綁定取決於生成的html的外觀。烏拉圭回合特定的場景正確綁定HTML應該像

<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[0].BandName"/> 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[1].BandName"/> 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[2].BandName"/> 
. 
. 
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[n].BandName"/> 

我還沒有嘗試過,但我幾乎可以肯定,在循環調用ToArray的方法是保持從生成嵌套輸入正確的名稱系統。有兩件事情可以做,以解決這個 首先,在您的視圖模型變化

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; } 

public IList<BandAvailabilityInfo> BandAvailabilities { get; set; } //or Array 

,所以你不必調用ToArray的方法在環和專有名詞做是爲輸入而生成的。 其次,製作一個編輯器模板,並將其放置在當前控制器下或共享文件夾的Editor模板文件夾下的Editor模板文件夾中。使此視圖接受BandAvailabilityInfo類型的模型,此視圖的名稱也應爲BandAvailabilityInfo。然後在主視圖中,你只能有

<%: Html.EditorFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities%> 

和休息更換整個循環將通過框架本身

+0

我不確定它是否因爲我使用ToArray或者沒有,但將其更改爲實際的陣列可以解決問題。 – Arkiliknam 2012-01-12 13:48:13

+0

你可以檢查生成的html,並確保它 – 2012-01-12 14:50:56

0

它與IEnumarble類型正常工作。
我認爲問題在於您在For循環中編寫的ToArray。 (它也是非常不高效的)
for環更改爲foreach

查看this優秀的答案如何實現它。

+0

我使用for循環,因爲我需要創建TextBoxFors,它使用Model的謂詞參數來標識我的模型中的某個集合的哪個元素,我正在製作此TextBoxFor。索引只是跟蹤這些元素的一種方式。在foreach循環中,我失去了元素來自哪裏的上下文。據我所知,這種方式不是低效的比較,特別是如果我使用陣列的速度是O(1)。 – Arkiliknam 2012-01-19 15:43:49