多態模型綁定這個問題問過在早期的MVC版本中。也有這篇博客文章一個解決問題的方法。我想知道MVC 3是否引入了可能有幫助的東西,或者是否還有其他選擇??傊G闆r就是這樣。我有一個抽象的基模型和兩個具體的子類。我有一個強類型視圖,它將模型呈現為EditorForModel()..然后,我有自定義模板來呈現每個具體類型。這個問題是在事后發生的。如果我使POST操作方法以基類為參數,那么MVC就不能創建它的抽象版本(無論如何,我都不希望它創建實際的具體類型)。如果我創建了多個POST操作方法,這些方法僅隨參數簽名而變化,那么MVC會抱怨它不明確。據我所知,關于如何解決這個問題,我有幾個選擇。由于種種原因,我不喜歡它們中的任何一個,但我會在這里列出它們:創建自定義模型綁定,正如Darin在我鏈接的第一篇文章中所建議的那樣。創建一個區分器屬性,作為我鏈接到的第二個帖子?;陬愋偷陌l布到不同的動作方法???我不喜歡1,因為它基本上是隱藏的配置。其他一些從事代碼開發的開發人員可能不知道這一點,并且浪費了大量的時間試圖找出為什么在更改時事情會中斷。我不喜歡2,因為它看起來有點煩人。但是,我傾向于這種方法。我不喜歡3,因為那意味著違反了干法。還有其他建議嗎?編輯:我決定采用達林的方法,但做了一點小小的改變。我將其添加到抽象模型中:[HiddenInput(DisplayValue = false)]public string ConcreteModelType { get { return this.GetType().ToString(); }}然后在我的DisplayForModel()..你唯一要記住的是如果你不使用DisplayForModel()你得自己加進去。
3 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
[HttpPost]public ActionResult Index(MyModel model) {...}
[HttpPost]public ActionResult Index() {...}{ MyModel model; if (ViewData.SomeData == Something) { model = new MyDerivedModel(); } else { model = new MyOtherDerivedModel(); } TryUpdateModel(model); if (Model.IsValid) {...} return View(model);}
is
UpdateModel
TryUpdateModel
- 3 回答
- 0 關注
- 306 瀏覽
添加回答
舉報
0/150
提交
取消