2010-11-11 43 views
2

在越来越史诗般的失败是我的创建和编辑窗体,我仍然有问题通过Html.Checkbox()生成复选框。我不知道现在是否应该手动编写HTML。MVC2复选框:仍有问题;或者:选择了什么与它有关?

我有一个视图模型:

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#的经验不足,我只是不确定该从哪里出发。这似乎并没有帮助,这似乎是表单处理的一部分,或者被大多数演示和教程掩盖或完全忽略。

所以,再次,任何帮助将不胜感激。

回答

3

问题是你没有写任何东西到响应流。 Html.Checkbox()返回一个字符串,它不直接写入响应对象(也不是Html.Encode() - 它只是转义保留字符并返回结果字符串)。Html.Checkbox()返回一个字符串,不直接写入响应对象(也不是Html.Encode最重要的是,ForEach扩展方法只执行一个动作,它不会返回一个值。

所以,你必须沟的ForEach扩展,并使用<%=%>或<%:%>代码掘金:

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