为了让我的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帮助方法,因为它们对我的需求太不灵活了。我的复选框按设计使用整数作为其值。答案 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 %>