【发布时间】:2012-01-11 19:26:27
【问题描述】:
目前,我的 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");
我的视图模型:
[DisplayName("Charge group")]
public short? ChargeGroup { get; set; }
public SelectList ChargeGroups;
那么在我看来:
<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>
我应该把这些东西放在哪里?
【问题讨论】:
-
好吧,因为这是一个 ViewModel 而不是一个模型,我在这里没有看到问题。这与渲染视图有关,因此在 ViewModel 中是有意义的。在回发时,我会将其转换为模型,然后再发送到数据库,这样您就不会违反 DTO……无论如何,我对其他人对此的看法很感兴趣。
-
我同意@JohnKalberer。 ViewModel 不必是完全贫乏的 DTO,它可以包含与 View 相关的逻辑。我将在控制器中(或由控制器使用)将传入的 ViewModel 数据转换为 Model 业务层,并返回到传出的 ViewModel 数据。 (附注:为什么在业务模型上有
SelectList?SelectList不是专门的 MVC UI 元素吗?业务模型不应该与 UI 实现紧密耦合。) -
我的意思是说 ViewModel 不是模型对不起。 [已编辑]
标签: c# asp.net-mvc entity-framework