快速MVC2复选框问题

时间:2011-01-13 01:59:28

标签: asp.net-mvc-2 checkbox

为了让我的EF4 EntityCollection与复选框值绑定,我必须在循环中手动创建复选框,如下所示:

<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 个答案:

答案 0 :(得分:2)

关闭。您实际上想要修改服务器端代码,以便根本不会发出“已检查”属性,除非您希望选中复选框。

checked="true"

checked="false"
从技术上讲,

都是无效的HTML。 Source

如果您想要选中复选框,则需要发出:

checked="checked"

引号中的任何值都会实际选中该复选框(包括checked =“false”),但check =“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 />

答案 1 :(得分:0)

你走在正确的轨道上,但我认为你需要修改snipet到它

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