亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

多態模型綁定

多態模型綁定

catspeake 2019-07-25 14:14:52
多態模型綁定這個問題問過在早期的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個贊

我剛剛想出了解決這個問題的辦法。而不是像這樣使用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);}

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

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




查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 306 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號