我很好奇,如果綁定模型直接作爲參數在行動方法被認爲是壞主意?綁定域模型直接是一個壞主意?
如果表格變得複雜,我可以創建一個自定義模型聯編程序。
有沒有使用這種方法的任何坑?
我想避免創建viewmodel,因爲我想讓我的app儘可能簡單。我想避免重複代碼和模型視圖到模型綁定。
我很好奇,如果綁定模型直接作爲參數在行動方法被認爲是壞主意?綁定域模型直接是一個壞主意?
如果表格變得複雜,我可以創建一個自定義模型聯編程序。
有沒有使用這種方法的任何坑?
我想避免創建viewmodel,因爲我想讓我的app儘可能簡單。我想避免重複代碼和模型視圖到模型綁定。
我建議幾乎總是使用視圖模型。
如果您使用的是默認的對象模板...他們不太喜歡非平面模型,雖然您可以重寫它們,但並不總是一個好主意。領域模型通常不是平坦的。無論哪種方式,基於ModelMetaData的任何東西都比ViewModel更容易。
使用ViewModel進行驗證也更容易,因爲您已經有了更加專注的模型,有時候驗證只在某些視圖中才有意義。
創建ViewModels比使用JsonResult發送模型好得多,也更安全...呃...即使您不使用ViewModel,也不應該發送域模型。但是當您準備好ViewModel時,使用JsonResult會更容易。當您習慣於在任何地方使用您的域模型時,犯錯誤和暴露敏感信息也更容易。
更改有時更容易,因爲更改域模型上的屬性並不意味着您必須更改所有視圖,只需更改ViewModel的創建(如果您使用某種映射器,那只是一個改爲綁定),儘管這不是IMO的強項。
其他一些優點是將表示層與業務層分離,如果使用EF或非poco對象,則在視圖中使用它們會更困難。
如果你想消除重複的代碼,你可以考慮創建自動創建ViewModels的過濾器,甚至不用動作,使用映射器的過濾器消除了大量的代碼重複。
順便說一句,我看不出如何創建自定義模型綁定比使用ViewModels更簡單。
不一定。但很快你會發現一些需要在模型上的狀態,但是是特定於UI的,並且最終你最終創建一個ViewModel。
也爲一些屬性,如DateTime
,這將不能很好的示範,如果定義爲DateTime
因爲不存在與使它可選的,所以你必須把它定義爲string
問題的工作。我不相信你想要約會string
約會。
此外,對於DropDown項目,您需要在模型上有SelectListItem
的模型集合,這對模型沒有意義。
這就是發生在我身上的事。
我會建議你總是創建一個ViewModel。在其最簡單的形式中,它可能僅包含一個包含域對象(和附件數據)的屬性。喜歡的東西:
public class DomainModelClass
{
int Property1 { get; set; }
int Property2 { get; set; }
}
public class ViewModelClass
{
DomainModelClass DomainModel { get; set;}
SelecList List1 { get; set; }
}
不管怎麼說,這個建議只是爲了讓事情變得簡單,因爲我會建議你創建一個「真正的」視圖模型,並使用類似AutoMapper映射視圖模型< - >的DomainModel,即使在一個簡單的場景。
對於可選日期,我可以使屬性爲空,並通過其他操作方法通過ajax加載我的下拉列表項。 – user256034 2011-02-24 09:58:50
是的,你可以。但就模型而言,它是否真的可以約會呢?如果是這樣,那麼你很好。我也爲我的下拉菜單使用AJAX。 – Aliostad 2011-02-24 09:59:55