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

烙印99
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
[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
添加回答
舉報(bào)
0/150
提交
取消