快速 MVC2 复选框问题

发布于 2024-10-11 17:44:45 字数 1075 浏览 1 评论 0原文

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

In order to get my EF4 EntityCollection to bind with check box values, I have to manually create the check boxes in a loop like so:

<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>

It works, but it doesn't automatically populate the group of check boxes with existing values when I'm editing a model entity. Can I fudge it with something like?

<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>

I figure there has to be something along those lines which will work, and am just wondering if I'm on the right track.

EDIT: I'm purposely staying away from MVC's check box HTML helper methods as they're too inflexible for my needs. My check boxes use integers as their values by design.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

热血少△年 2024-10-18 17:44:45

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

checked="true"

或者

checked="false"

在技术上都是无效的 HTML。 来源

如果你想要一个选中的复选框,你需要发出:

checked="checked"

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

Close. You'll actually want to modify your server-side code so that the "checked" attribute is not emitted at all unless you want the checkbox to be checked.

checked="true"

or

checked="false"

are technically both invalid HTML. Source.

If you want a checked checkbox, you want to emit:

checked="checked"

Any value in the quotes will actually check the box (including checked="false"), but checked="checked" is considered proper.
So, updating your code, just tweak the ternary operator to use checked='checked' or nothing at all.

<%: 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 />
梦里梦着梦中梦 2024-10-18 17:44:45

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

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

You're on the right track, but I think you need to modify the snipet to it to

<%: Model.GameData.Platforms.Any(p => PlatformID == i) ? "checked='true'" : string.Empty %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文