2011-01-13 45 views
1

爲了讓我的EF4 EntityCollection與複選框值綁定,我有一個循環手動創建的複選框,像這樣:快速MVC2複選框問題

<p> 
    <%: Html.Label("Platforms") %><br /> 
    <% for(var i = 0; i < Model.AllPlatforms.Count; ++i) 
     { %> 
      <%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" /><br /> 
    <% } %> 
</p> 

它的工作原理,但它不在編輯模型實體時自動填充具有現有值的複選框組。我可以用類似的東西來撫摸它嗎?

<p> 
    <%: Html.Label("Platforms") %><br /> 
    <% for(var i = 0; i < Model.AllPlatforms.Count; ++i) 
     { %> 
      <%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" checked=<%: Model.GameData.Platforms.Any(p => PlatformID == i) ? "true" : "false" %> /><br /> 
    <% } %> 
</p> 

我想必須有沿着那些將工作方針的東西,而我只是想知道如果我在正確的軌道上。

編輯:我故意遠離MVC的複選框HTML幫助器方法,因爲它們對我的需求太不靈活。我的複選框通過設計使用整數作爲它們的值。

回答

2

關閉。實際上,您需要修改服務器端代碼,以便不會發出「checked」屬性,除非您希望複選框被選中。

checked="true" 

checked="false" 

在技術上都無效的HTML。 Source

如果你想有一個選中的複選框,要發出:

checked="checked" 

在行情的任何值實際上會選中該複選框(包括託運=「假」),但已檢查=「檢查」被認爲是正確。 因此,更新你的代碼,只需調整三元運算符來使用checked ='checked'或者什麼也不做。

<%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" <%: Model.GameData.Platforms.Any(p => p.PlatformID == i) ? "checked='checked'" : "" %> /><br /> 
+0

沒有骰子,出現編譯器錯誤。 – 2011-01-13 02:38:35

0

你在正確的軌道上,但我想你需要修改snipet給它

<%: Model.GameData.Platforms.Any(p => PlatformID == i) ? "checked='true'" : string.Empty %>