asp.net-mvc-2 - MVC2 复选框 : Still having problems; Or: What does isSelected got to do with it?

标签 asp.net-mvc-2 checkbox

在我的创建和编辑表单日益严重的失败中,我仍然在通过 Html.Checkbox() 生成复选框时遇到问题。我不确定此时是否应该手动编写 HTML。

我有一个 View 模型:

public class AdminGameReviewViewModel
{
    public Game GameData { get; set; }
    public List<Genre> AllGenres { get; set; }
    public List<PlatformListing> AllPlatforms { get; set; }
}

还有一个辅助模型:

public class PlatformListing
{
    public Platform Platform { get; set; }
    public bool IsSelected { get; set; }
}

而且,我正在尝试生成这样的复选框:

<%: Html.Label("Platforms") %><br />
<% Model.AllPlatforms.ForEach(p => Html.Encode(Html.CheckBox("PlatformIDs", p.IsSelected, new { value = p.Platform.PlatformID }))); %>

但是,它们根本没有显示。

我很好奇为什么我需要为复选框本身提供 bool 值。我认为它会简单地以类似于 PHP 的 $_POST 的数组或列表形式发送回检查值。因此,除了我犯下的任何其他脑死亡错误之外,我不确定我是否正确实现了我的 bool 属性。 bool 值迫使我将想要显示/绑定(bind)的数据隐藏得比我想要的更远,并且它给我“看到”我做错了什么带来了问题。

我一直感觉自己对问题的研究太过深入,并试图使解决方案变得比应有的更复杂。鉴于我对 MVC2/C# 缺乏经验,我只是不确定从这里该去哪里。这似乎是大多数演示和教程都掩盖或完全忽略的表单处理的一部分,这并没有帮助。

因此,我们将不胜感激任何帮助。

最佳答案

问题是您没有向响应流写入任何内容。

Html.Checkbox() 返回一个字符串,它不会直接写入响应对象(Html.Encode() 也不会 - 只是转义保留字符并返回结果字符串)。最重要的是,ForEach 扩展方法仅执行一个操作,它不返回值。

因此,您必须放弃 ForEach 扩展,并使用 <%= %> 或 <%: %> 代码块:

<% foreach (var p in Model.AllPlatforms) { %>
   <%= Html.CheckBox("PlatformIDs", p.IsSelected, new { value = p.Platform.PlatformID }) %>
<% } %>

关于asp.net-mvc-2 - MVC2 复选框 : Still having problems; Or: What does isSelected got to do with it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157277/

相关文章:

asp.net-mvc-2 - MVC DropDownListFor - 验证失败后我必须手动重新填充选项吗?

asp.net - 在 ASP.NET MVC 2 中 - 如何将路由值输入到我的导航 Controller 中,以便我可以突出显示当前链接?

java - 我如何检查所有复选框,甚至是分页隐藏的复选框?

HTML5 - 选择多个必需的复选框

php - 全选复选框

asp.net-mvc-2 - 在 Entity Framework 中,我应该在 ViewModel 和 Repository 中使用 List<MyEntity> 还是 IQueryable<MyEntity>

sql-server - 如何检查表是否存在于模型中但不存在于数据库中

asp.net - 如何使用 ASP.NET MVC 增加 AJAX JSON 响应的 2MB 限制

Silverlight 复选框双向绑定(bind)无法按预期工作

javascript - Knockout.js 复选框用于控制输入字段的启用/禁用状态