代码之家  ›  专栏  ›  技术社区  ›  Major Productions

MVC2复选框:仍然有问题;或者:isSelected与此有什么关系?

  •  2
  • Major Productions  · 技术社区  · 14 年前

    我有一个视图模型:

    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 }))); %>
    

    但是,他们一点也没有表现出来。

    我很好奇为什么我需要为复选框本身提供布尔值。我认为它只需发送回选中的值,作为一个数组或列表,类似于PHP的$POST。所以,我不确定我是否正确地实现了布尔属性,除了我犯下的其他脑死亡错误之外。布尔值迫使我将要显示/绑定的数据掩埋得比我希望的更远,这给了我“看到”自己做错了什么的问题。

    我一直觉得我对自己的问题看得太深了,并试图使解决方案比应该的更复杂。考虑到我对MVC2/C缺乏经验,我只是不知道从这里走到哪里。这似乎是表单处理的一部分,而大多数演示和教程都忽略了这一部分,这一点也于事无补。

    因此,再次感谢您的帮助。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Kirk Clawson    14 年前

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

    Checkbox()返回一个字符串,它不直接写入响应对象(Html.Encode()也不直接写入响应对象,它只转义保留字符并返回结果字符串)。除此之外,ForEach扩展方法只执行一个操作,而不返回值。

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

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