第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多態(tài)模型綁定

多態(tài)模型綁定

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

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗 獲得超9個贊

我剛剛想出了解決這個問題的辦法。而不是像這樣使用Parameterbsed模型綁定:

[HttpPost]public ActionResult Index(MyModel model) {...}

我可以使用TryUpdateModel()來確定在代碼中綁定到哪種模型。例如,我做了這樣的事情:

[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);}

這實際上要好得多,因為如果我正在進(jìn)行任何處理,那么我將不得不將模型轉(zhuǎn)換為任何實際情況,或者使用is找出要使用AutoMapper調(diào)用的正確地圖。

我想我們中那些從第一天起就沒有使用MVC的人忘記了UpdateModelTryUpdateModel,但它仍然有它的用途。



查看完整回答
反對 回復(fù) 2019-10-13
  • 3 回答
  • 0 關(guān)注
  • 371 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號