0

我这样做是为了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
}

这行得通。问题是我很难@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一种方法,即翻译字符串的方法。

谢谢。

4

2 回答 2

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)

根据您期望检索的内容,这可能是您想要的也可能不是您想要的,但它可能是一个可能的解决方案或朝着您正在寻找的正确方向迈出一步。

于 2013-08-26T18:33:00.900 回答
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>
于 2013-08-26T20:43:02.820 回答