我目前已經把我所有的這些混亂放在ViewModel的頂部,這讓我感覺違反了DTO的目的。例如,這是我的看法車型之一的構造 -ASP.NET MVC在哪裏保留SelectLists的值
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 ...無論如何,我對其他人的意見感興趣。 – 2012-01-11 19:30:18
我同意@JohnKalberer。 ViewModel不一定是完全貧血的DTO,它可以包含與視圖相關的邏輯。我會在控制器中使用邏輯(或由其使用)來將傳入的ViewModel數據轉換爲Model業務層,然後轉換回傳出的ViewModel數據。 (一方面注意:爲什麼在業務模型中有一個「SelectList」?是不是'SelectList'特別是一個MVC UI元素?業務模型不應該與UI實現緊密結合) – David 2012-01-11 19:35:07
我的意思是說ViewModel不是模型對不起。 [post edited] – NoPyGod 2012-01-11 20:23:35