2010-05-03 40 views
0

我有一個驗證服務器端用戶輸入一個自定義類(ServerSideValidator.vb)防止回發事件處理程序(它不使用任何內置的驗證程序的.NET的,因此Page.Validate()是對我來說不是一種選擇)。我打電話在page.IsPostback事件和類執行Validate()方法沒有任何問題如何從射擊

我的問題是,當驗證失敗(返回false),我想停止觸發回發事件處理程序,但加載頁面以及其中的所有控件和用戶輸入值。如果我這樣做,Response.End(),頁面會變成空白。我可以以編程方式指示頁面轉到上一頁(回發之前的原始表單),但它會丟失所有用戶輸入。

我想創造隱藏文件頁碼的全局布爾變量,並執行任何回發方法之前檢查值,但這種方法從我的計劃提供的類本身內部的所有功能帶走。頁面對象被引用到ServerSideValidator。

好像所有的回發相關的屬性/變量我遇到頁類中是「只讀」,我不能指定值(S)來控制/防止回發事件燒製而成。

任何idiea我怎麼能做到這一點?請讓我知道,如果你需要進一步的細節

回答

0

它可能更容易,每次回發到同一頁,做您的驗證那裏,特別是在頁面加載事件。如果驗證失敗,您已經在正確的頁面上,不必轉到上一頁。如果驗證成功,則可以根據需要重定向到另一個頁面,在這種情況下,您可能不需要任何數據。

編輯:這不完全是你所要求的,但我有一種感覺,它會符合現有的ASP.NET驗證設計時所要做的。請參閱http://www.dotnetcurry.com/ShowArticle.aspx?ID=197http://www.4guysfromrolla.com/articles/073102-1.aspx

基本上,您可以像現在一樣創建自定義類,但繼承自BaseValidator。要遵循您的設計,您可以創建一個名爲ValidationType的枚舉,其中包含字母,字母數字等。在您的自定義類中,創建一個名爲ValidationType的屬性,該屬性使用ValidationType枚舉。當然,你必須添加所有的驗證邏輯。然後在您的aspx頁面中,您可以將自定義驗證器添加到該頁面,並設置ValidationType =「Alphabetic」等,並提供完整的IntelliSense支持。

由於您使用的是BaseValidator,因此所有的常規驗證技術都可以工作,包括Page.Validate(),Page.IsValid等等。如果您願意,您甚至可以創建客戶端驗證JavaScript。

話雖如此,有人可能已經爲你做了大部分。

+0

它張貼回到同一頁面。例如我在Default.aspx頁面上有SAVE按鈕。當用戶點擊該按鈕,在Page_Load中我編碼 如果Page.IsPostBack然後 昏暗的SSV作爲新ServerSideValidator() ssv.AddValidation(txtName的 '字母') ssv.AddValidation(txtDescription, '字母') 如果不ssv.Validate()Then ''我正在尋找一個代碼塊,它將繞過 ''SAVE按鈕事件處理程序。我還是想在頁面完成 '加載和保存所有的用戶輸入 結束如果 結束如果 – user331744 2010-05-03 20:50:42

+0

它回發到同一頁。例如我在Default.aspx頁面上有SAVE按鈕。當用戶單擊按鈕時,在Page_Load上,我正在編碼
如果Page。IsPostBack Then
Dim ssv As New ServerSideValidator()
ssv.AddValidation(txtName,'alphabetic')
ssv.AddValidation(txtDescription,'alphanumeric')
如果不是ssv.Validate()Then
''我正在查找代碼在此處將阻止「
」SAVE按鈕事件處理程序。我仍然希望頁面完成
''加載並保留所有用戶輸入
結束如果
結束如果 – user331744 2010-05-03 20:52:23

+0

當我提到回到上一頁時。我只是做了一個javascript history.go(-1)。這樣,它加載default.aspx作爲一個新的負載(缺少所有用戶輸入) – user331744 2010-05-03 20:54:27