我这样做是为了在我的视图中使用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
作为翻译字符串的方法的第一种方式。
感谢。
答案 0 :(得分:2)
根据您的描述,我认为自定义编辑器模板可能是您正在寻找的解决方案。编辑器模板几乎就像使用EditorFor
帮助程序时为特定类型生成的部分视图。要创建自定义编辑器模板,请在 View \ Shared 文件夹下创建一个目录(如果该目录尚不存在),并将其命名为 EditorTemplates 。在此文件夹中,创建一个以其将绑定的Type命名的局部视图,例如 Boolean.cshtml 或 DateTime.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)
根据您期望检索的内容,这可能是您想要的,也可能不是您想要的,但它可能是您正在寻找的正确方向的可能解决方案或步骤。
答案 1 :(得分: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>