2011-10-18 187 views
2

我在我的視圖模型類似在ASP.NET MVC3中,有沒有辦法讓[RegularExpression]標籤動態化?

[RegularExpression(...)] 
public string PenguinGenome 
{ 
    get;set; 
} 

public int PenguinSpecies 
{ 
    get; set; 
} 

有沒有一種方法,使動態...基於PenguinSpecies?

即:

[RegularExpression(GetExpression(PenguinSpeciesId))] 
public string PenguinGenome 
{ 
    get;set; 
} 

public int PenguinSpeciesId 
{ 
    get; set; 
} 

public string GetExpression(int speciesId) 
{ 
    if (.....) 
     return "[some regex]"; 
} 

這不會起作用,因爲PenguinSpeciesId不會在上下文中。什麼是最好的解決方法?

+0

問題是,屬性不能包含任何非靜態引用,因爲它們是特定類/屬性/任何元數據的一部分。所以你不能調用任何方法或屬性來實例化它們。 – Buildstarted

回答

1

This is an article對於ASP.NET MVC2,但是對於ASP.NET MVC3來說,這個過程非常接近。

基本上,您將需要創建自己的自定義驗證程序,可以查看該對象,然後確定驗證的正確方法。

0

RegularExpression驗證器不是你想要的。你想根據另一個模型屬性的值來驗證PenguinGenome。換句話說 - 你不想在這裏進行屬性驗證,而是模型驗證。

您可以使用模型識別驗證屬性,但我個人wouldnt - 因爲它「隱藏」依賴(沒有人可以從模型類看出,PenguinGenome驗證取決於PenguinSpeciesId)。我寧願在這裏使用IValidatableObject。

+0

使用正則表達式標籤,它會自動將正則表達式驗證放入我的視圖中。這個解決方案會做同樣的事嗎? – NibblyPig

+0

不,不幸的是,自動生成的客戶端驗證不會在你的場景中工作 - 生成的正則表達式將不得不隨着PenguinSpeciesId的任何變化而改變 - 這是不支持開箱即用的。你必須使用自定義驗證邏輯(jQuery是你的朋友)或MVC支持的遠程驗證。 – rouen

相關問題