我沒有在我的MVC應用程序中使用「模型綁定」 - 也就是說,我沒有嘗試過將表單輸入映射到Action參數列表中的一個或多個類,在許多地方描述的方式。相反,我只是發送每個單獨的表單字段的參數,或使用FormCollection。MVC模型綁定混淆
我在想我可能會嘗試這個,但我對基本前提感到困惑。看起來這個想法是,你使用相同的模型來進行ViewModel(從Controller到View)的「綁定」(從View到Controller)。 (我爲每個視圖使用強類型視圖和單獨的ViewModel。)
但是,我發現我的View的需求與我的Action的需求完全不同 - 例如,視圖可能需要用戶可以從中選擇幾個SelectLists。但是,Action只需要知道用戶選擇了哪些項目,而不是每個列表中的所有選項。
真的習慣使用同一個班同時進行兩個方向嗎?
例如,這裏是我的ViewModel類之一:
public class IntervieweeSelectLists
{
public SelectList intervieweesList { get; set; }
public ClientSelectLists districtFilterLists { get; set; }
public SchoolDisplayListInfo schoolListDisplay { get; set; }
public long selectedIntervieweeID { get; set; }
public string selectedIntervieweeName { get; set; }
public string selectedSiteID { get; set; }
public bool needsInterviewList { get; set; }
public bool needsClientSelectLists { get; set; }
}
(再加上有一些方法等)
通過查看需要的這個類,但並非所有的它是需要的行動 - 即,intervieweesList,districtFilterLists,needsInviewview等
我想我的問題是:如果我要寫一個自定義模型綁定器綁定此類,我將不得不重新創建整個類模型聯編程序,包括SelectLists,內容其中來自數據庫,當我真正需要的是用戶選擇的東西?或者我會設置這個類的現有實例中的所有值,從View中發送到模型聯編程序?
對不起,如果這是不連貫的......我的理解在這裏丟失了一些東西。幫幫我! :)
那麼,我正在考慮自定義模型綁定器的原因是,當我嘗試將上述類放入Action的參數列表中時,即使Model.IsValid爲空,所有字段都返回null(或默認值)真正。它看起來像是默認的模型綁定器無法解決它。但可能是因爲我沒有遵循字段的正確命名約定。 – Cynthia 2010-07-28 15:53:52
好的,當我嘗試更改HTML字段名稱以匹配類中的內容時,我正在獲取值(進度!)。然而,返回的一些字段被埋在類的較低層中 - 即,所選區屬性在區域過濾列表對象內。它根本沒有選擇 - districtFilterLists爲空。所以我想我需要一個自定義模型構建器 - 或者徹底改變我的ViewModel類。但是,謝謝,我覺得我終於到了某個地方。我沒有同事 - 我是整個IT部門。 - 所以我需要有人來反彈創意。 – Cynthia 2010-07-28 16:09:07
聽起來像您正在手動編寫您的HTML。您應該使用DisplayFor和EditFor html幫助程序爲您創建html。他們會自動爲您創建名稱。我強烈建議在http://www.asp.net上檢查ASP.Net MVC演示。 (Model.IsValid只是驗證,如果你沒有驗證數據註釋,那麼該屬性默認是有效的) – 2010-07-28 18:39:38