2012-04-15 66 views
1

在asp.net mvc3中,我想要一個通用的方法,它將視圖模型對象添加到數據庫中,無論數據庫發送到數據庫中的哪個位置。要做到這一點,我試圖通過發佈的模型。不過,我動態地做這件事有點困難。我試過,但沒有奏效:我可以動態發佈視圖模型嗎?

觀點:

(psuedo) 
begin form aiming at Add 
fields 
input type = submit 

控制器動作

[HttpPost] 
public ActionResult Add(dynamic model,...) 

問題是模型是永遠不會填滿。隱藏的字段是,但模型用助手定義的實際字段不會進入模型。我知道只是將它命名爲model很可能不會排列正確。我敢肯定,如果我強烈地鍵入模型,如(MyExplicitClass model,...),它會工作,但這會破壞動態方法,因爲我希望能夠發送class1,class2,class3,class5,class8,class13等。

Is there任何方式得到這個工作,無論發送什麼@model class21dynamic model(或equiv)都會捕獲該對象?

回答

2

不,至少不是沒有使用自定義模型聯編程序。

您對模型綁定的工作原理有一個基本的誤解。您認爲模型綁定基於視圖中的@model工作。這不可能離真相更遠。模型綁定通過查看action方法中指定的參數來工作。

所有的模型綁定器都在查看爲action方法指定的參數類型,然後查看Request值(querystring或post)並嘗試匹配它們。如果它發現匹配,它將實例化對象。

這裏的關鍵是模型聯編程序僅實例化在action方法的參數中指定的對象。什麼對象是「動態」?它不知道。因此它不能創建任何類型。

編輯:

你會發現這個問題非常有用

Polymorphic model binding

+0

如果我把一個過濾器來推斷,然後投的類型?這可以工作嗎? – 2012-04-15 21:34:35

+0

@TravisJ - 過濾器(假設你是一個屬性)在編譯時被靜態綁定。他們不會在運行時工作,所以無法在運行時更改過濾器。 – 2012-04-15 21:39:02

+0

可以通過綁定蹦跳,並在運行時使用動態創建的靜態類型的副本來完成。 – 2012-04-15 21:39:54

相關問題