2013-08-26 90 views
0

我这样做是为了显示“清单”在我看来,使用CheckBoxFor创建单独的CheckBoxFor:需要一个快速解决方案,每个枚举

@Html.LabelFor(m => m.MyEnum, T("Pick Your Poison")) 
<div>     
    @for(int i = 0; i < Model.Alcohol.Count; i++) 
    { 
     <label> 
      @T(Model.Alcohol[i].Text) 
      @Html.CheckBoxFor(m => Model.Alcohol[i].Selected) 
      @Html.HiddenFor(m => Model.Alcohol[i].Value) 
     </label> 
    } 
</div> 

这是enum我使用(只是为了清楚起见):

public enum MyEnum 
{ 
    Beer = 1, 
    Vodka = 2, 
    Rum = 3 
} 

This works。问题是我很难让@T动态地翻译每个单独的项目。所以,我需要继续解决这个问题(这不容易解决 - 而不是这个问题的重点)。

我想要做的是单独输出每个项目,因此我可以将自己的文本应用于每个复选框项目(因此对每个项目执行@T("")) - 这将起作用。

问题是我在CheckBoxFor的视图中找不到任何现成的语法信息。

我想要做这样的事情在我看来:

@Html.LabelFor(m => m.MyEnum, T("Pick Your Poison")) 
<div> 
    <label> 
    @T("Beer") <!--This will work--> 
    @Html.CheckBoxFor(m => Model.Alcohol.Beer) <!--Is this even right?--> 
    @Html.HiddenFor(m => Model.Alcohol.Beer) <!--Is this even right?--> 
    </label> 
    <label> 
    @T("Vodka") 
    @Html.CheckBoxFor(m => Model.Alcohol.Vodka) 
    @Html.HiddenFor(m => Model.Alcohol.Vodka) 
    </label> 
    <label> 
    @T("Rum") 
    @Html.CheckBoxFor(m => Model.Alcohol.Rum) 
    @Html.HiddenFor(m => Model.Alcohol.Rum) 
    </label> 
    } 
</div> 

是这样做可能吗?在CheckBoxFor(我看到的所有示例只使用@for循环)中单独列出项目的正确语法是什么。我只想继续尝试用@T这种第一种方法来实现,这是一种翻译字符串的方法。

谢谢。

+1

所以,你想创建一个组复选框,一个在每个枚举值? – asymptoticFault

+0

是的,'@ for'循环处理这个问题,但是我使用我的'@ T'是因为它的运算生成 - 在构造视图之前'@ T'完成了它的工作。我想到一个解决方法是单独列出每个枚举/复选框。 – REMESQ

+0

什么是T?它是一个定制的帮手吗? – asymptoticFault

回答

0

什么清盘工作对我来说是以下几点:

@Html.LabelFor(m => m.MyEnum, T("Pick Your Poison")) 
<div>     
    @for(int i = 0; i < Model.Alcohol.Count; i++) 
    { 
    <label> 
     @T("Beer") 
     @Html.CheckBoxFor(m => Model.Days[0].Selected) 
     @Html.HiddenFor(m => Model.Days[0].Value) 
    </label> 
    <label> 
     @T("Vodka") 
     @Html.CheckBoxFor(m => Model.Days[1].Selected) 
     @Html.HiddenFor(m => Model.Days[1].Value) 
    </label> 
    <label> 
     @T("Rum") 
     @Html.CheckBoxFor(m => Model.Days[2].Selected) 
     @Html.HiddenFor(m => Model.Days[2].Value) 
    </label> 
    } 
</div> 
2

从您所描述的我认为自定义编辑器模板可能是您正在寻找的解决方案。编辑器模板几乎就像使用EditorFor帮助程序时为特定类型生成的部分视图。要创建自定义编辑器模板,请在View \ Shared文件夹下创建一个目录(如果尚不存在),并将其命名为EditorTemplates。在此文件夹中创建一个以它将被绑定到的类型命名的局部视图,例如Boolean.cshtmlDateTime.cshtml

下面的模板可能看起来像你的枚举的例子(MyEnum.cshtml):

@model MyEnum 
@Html.LabelFor(m => m, T("Pick Your Poison")) 
<div> 
    <label> 
     @T("Beer") 
     @Html.CheckBoxFor(m => MyEnum.Beer == Model) 
     @Html.HiddenFor(m => MyEnum.Beer) 
    </label> 
    <label> 
     @T("Vodka") 
     @Html.CheckBoxFor(m => MyEnum.Vodka == Model) 
     @Html.HiddenFor(m => MyEnum.Vodka) 
    </label> 
    <label> 
     @T("Rum") 
     @Html.CheckBoxFor(m => MyEnum.Rum == Model) 
     @Html.HiddenFor(m => MyEnum.Rum) 
    </label> 
</div> 

要使用你叫EditorFor编辑模板上是视图的属性键入MyEnum。例如:

public class MyViewModel 
{ 
    public MyEnum PropX { get; set; } 
} 

然后,在视图:

@model MyViewModel 
@Html.EditorFor(m => m.PropX) 

根据您所期待找回这可能是也可能不是你想要什么,但它可能是一个可能的解决方案或步骤你正在寻找什么的正确方向。