2009-09-14 129 views
0

我熟悉如何編寫和使用簡單情況下的自定義驗證器(即確保日期大於或等於某個值)。asp.net自定義驗證器問題

你會如何處理這一類型(普通)場景:

我有5個選項的下拉列表中,這取決於所選擇的選擇,其他幾個領域需要進行驗證。例如,如果從下拉列表中選擇「3」,則需要確保填充字段a,b,c,但如果從下拉列表中選擇「2」,則需要確保a,b是空白和E,F填寫等

我想問題是,自定義驗證程序是否與下拉列表關聯,或者你把一個自定義驗證程序的所有字段a/b/c/d/e/f等...或者是否有我可以調用的表單級定製驗證器的概念?

可能至少有十種不同的方式來做到這一點,但尋找最乾淨的選項。

+0

這是您在客戶端或服務器端進行的驗證嗎?在其他wodrs中,DropDownList的AutoPostBack屬性是否設置爲true? – 2009-09-14 15:49:25

回答

0

如果你不害怕使用MS AJAX工具包,你可以做出你想要的東西很快(如果可能不是性能友好最好的)。

創建幾個不同的自定義驗證器,每個自定義驗證器代表與下拉列表項關聯的不同驗證目標。將每個驗證器的Enabled屬性設置爲false。

在更改時有下拉列表autopostback,並基於所選值更改啓用哪個驗證程序。

將所有這些都包含在UpdatePanel中,以獲得流暢的用戶界面。

另一種方法涉及jQuery和其中一個驗證插件。你只需花一小段時間就可以適應你隨附的任何驗證插件。 (我喜歡這種方法,因爲它可以在不同的Web開發平臺上高度重用)。最終,您將在下拉列表中添加一個客戶端事件,以將CSS樣式添加到您的不同字段中或將其刪除。不過請記住防守編程幷包含服務器端驗證。

0

我最近answered a similar question處理1字段。您應該能夠擴展它以檢查各種選擇,然後檢查相關字段是否已填寫。

驗證可以更新這樣的:

bool isValid = true; 

switch (dropdown.SelectedValue) 
{ 
    case "Option1": 
     // check fields for Option1 
     break; 
    case "Option2": 
     // check fields for Option2 
     break; 
    default: 
     isValid = true; 
} 

args.IsValid = isValid; 

你的下一個問題可能是,「?我怎麼指明哪些字段是無效的用戶」有幾種不同的可能性。

如果這些字段在您的用戶界面上可視化地分組在一起,那麼您可以更新CustomValidator的ErrorMessage來聲明「XYZ字段是必需的」。但是,如果它們不是,或者如果您希望爲每個無效字段提供消息,則可以添加RequiredFieldValidator(或根據特定字段的需要進行的其他驗證)並使用適當的消息,並設置屬性(如果不是)如果將它們分組是有意義的),那麼基於選擇,基於下拉選擇驗證該特定組。

如果不同的字段可以與不同的下拉選項關聯,那麼驗證組的想法將不可行。相反,您可能會禁用每個字段的RequiredFieldValidator,爲每個字段的驗證器維護一個列表,並且在switch語句中,您可以遍歷它們,啓用它們,對其調用IsValid(將值存儲在bool和AND結果),然後使用CustomValidator的args.IsValid屬性的最終布爾結果。 AND'ing結果的一個例子可以在my reply to another question中看到。

如果您沒有正確調試它,那麼這種方法會變得非常棘手並且感覺被黑掉,因爲您需要知道所有的啓用/禁用功能,否則您可能會發現無法提交頁面當一切在屏幕上都顯示有效時,但實際上當你在交換機之前的每次呼叫中應該禁用所有驗證器時,啓用了某些功能,然後啓用所需的功能。