4

在MVC3上,是否有裝飾ViewModel屬性的方法,以便DefaultModelBinder在請求中使用不同的名稱?ViewModel屬性上的裝飾使用不同的名稱進行綁定

例如,假設有下列視圖模型:

public class SomeModel 
{ 
    public string Direction {get;set;} 
} 

但是進入的參數是風向從外部源(如某些第三方組件,例如)。

我知道一個自定義模型活頁夾可以處理,但我認爲必須有一種方法來裝飾屬性,類似於動作參數可以使用Bind(Prefix="...")的方式來定義該映射。

+0

是否[此答案](http://stackoverflow.com/a/4316327/172196)有幫助嗎? – 2013-04-11 16:52:36

+1

嗯,就是這樣。我知道一個自定義綁定可以完成這項工作,但它似乎有點像一個簡單的別名矯枉過正。 – 2013-04-11 16:56:19

+0

是否有理由不爲第三方的呼叫創建新的模型和方法? – 2013-04-11 18:22:48

回答

2

好的,經過更多的研究,看到類似的問題並看到這裏的反饋,似乎我的問題的答案基本上是「NO」。

沒有開箱即用的方式,所以必須使用自定義活頁夾或者或者應該重命名屬性。

有更詳細的回答類似的問題可以在這裏找到:How to bind URL parameters to model properties with different names

3

你總是可以創建另一個屬性:

public class SomeModel 
{ 
    public string Direction {get;set;} 
    public string Dir 
    { 
    get { return this.Direction; } 
    set { this.Direction = value; } 
    } 
} 

我還提到,視圖模型視圖中使用(CSHTML/vbhtml)並不一定是對POST方法所使用的相同視圖模型。

+1

正確,但這比解決方案更像是一種解決方法,不是嗎? – 2013-04-11 18:13:50

+0

正在重寫一個新的Model Binder解決方法或解決方案?我會認爲他們都是解決方案。您可以按照[建議]使用ModelBinderAttribute(http://blog.maartenballiauw.be/post/2008/09/01/Using-the-ASPNET-MVC-ModelBinder-attribute.aspx),但我個人的看法是那麼每次調用都需要使用它,而模型並不代表它實際正在做什麼。看起來不太可維護,要求程序員記住要在參數中做一些屬性才能正確綁定。 – 2013-04-11 18:17:00

+0

好了,編寫一個新的綁定器可以解決類似的問題,但這就是爲什麼我在實際上問我是否已經有MVC3中的某些東西可以允許裝飾ViewModel來管理映射,而不需要自定義綁定器。因爲它似乎是一個可能會遇到的相對常見的情況。 我不是說一個強制性的屬性,只是一個特殊的情況下,你希望使用更方便用戶的名字(在我的情況下,它是extJS發送一個Dir參數來表示排序方向)。 我同意,在每個動作上指定活頁夾並不是一個好主意。 – 2013-04-11 18:24:59

相關問題