NoP*_*God 2 c# asp.net-mvc entity-framework
我目前在ViewModel的顶部遇到了所有这些混乱,我觉得这违反了DTO的目的.例如,这是我的一个视图模型的构造函数 -
Dictionary<int, string> chargeGroups = new Dictionary<int, string>();
chargeGroups.Add(1, "Administration");
chargeGroups.Add(2, "Annual Leave");
chargeGroups.Add(3, "Bereavement");
chargeGroups.Add(4, "Customer Installation, Setup & Training");
chargeGroups.Add(5, "Customer Support");
chargeGroups.Add(6, "Internal Training & Education");
chargeGroups.Add(7, "Sales & Marketing");
chargeGroups.Add(8, "Sick");
chargeGroups.Add(9, "Software Devel / Maint / Test");
chargeGroups.Add(10, "Software Upgrade / Patch");
chargeGroups.Add(11, "Other");
chargeGroups.Add(12, "Other Absence");
chargeGroups.Add(13, "Warranty");
chargeGroups.Add(14, "Public Holiday");
chargeGroups.Add(15, "Other Paid Leave");
ChargeGroups = new SelectList(chargeGroups, "Key", "Value");
Run Code Online (Sandbox Code Playgroud)
我的viewmodel:
[DisplayName("Charge group")]
public short? ChargeGroup { get; set; }
public SelectList ChargeGroups;
Run Code Online (Sandbox Code Playgroud)
然后在我看来:
<div class="editor-label">
@Html.LabelFor(model => model.ChargeGroup)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ChargeGroup, Model.ChargeGroups)
@Html.ValidationMessageFor(model => model.ChargeGroup)
</div>
Run Code Online (Sandbox Code Playgroud)
我应该把这些东西放在哪里?
当我有一个不会改变的值列表时,我通常使用一个枚举,然后使用自定义的Html Helper来渲染一个选择列表.您可以使用元数据描述标记来自定义枚举值的显示文本.
那样你就可以使用:
<%: Html.EnumDropDownListFor(model => model.EnuProperty) %>
Run Code Online (Sandbox Code Playgroud)
要么
@Html.EnumDropDownListFor(model => model.EnuProperty)
Run Code Online (Sandbox Code Playgroud)
看看Simon的这篇文章,它允许你使用Meta Description属性来定制Enum名称的输出:
这是另一个例子,但缺少元描述属性:
编辑
你的枚举可能看起来像这样
public enum ChargeGroupEnum
{
[Description("Administration")]
Administration=1,
[Description("Annual Leave")]
AnnualLeave=2,
[Description("Bereavement")]
Bereavement=3,
[Description("Customer Installation, Setup & Training")]
CustomerInstallation=4,
[Description("Customer Support")]
CustomerSupport=5,
[Description("Internal Training & Education")]
InternalTraining=6,
[Description("Sales & Marketing")]
SalesMarketing=7,
[Description("Sick")]
Sick=8,
[Description("Software Devel / Maint / Test")]
Development=9,
[Description("Software Upgrade / Patch")]
Upgrade=10,
[Description("Other")]
Other=11,
[Description("Other Absence")]
OtherAbsence=12,
[Description("Warranty")]
Warranty=13,
[Description("Public Holiday")]
PublicHoliday=14,
[Description(")ther Paid Leave")]
OtherPaidLeave=15
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图模型上,您可以使用以下内容使字段以无值开始,并请求值:
[Required(ErrorMessage=" * required")]
public ChargeGroupEnum? ChargeGroup {get;set;}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您将使用Html Helper"ChargeGroupEnum",您需要从我链接的帖子中获取.
@Html.EnumDropDownListFor(model => Model.ChargeGroup)
Run Code Online (Sandbox Code Playgroud)
如果你的模型有一个Int,你可以轻松地从Enum => Int和Int => Enum进行投射.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |