Handling validation errors on the page level

H

hardieca

Hi,

I've created an n-tier app where validation rules reside in the
business layer. When a webform is saved, a business object examines
its state, and if some property is invalid, throws a custom exception
(ValidationException)

The exception bubbles up to the UI where it gets trapped:

Private Sub Page_Error(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Error
Dim ctx As HttpContext = HttpContext.Current

Dim exception As Exception = ctx.Server.GetLastError()

If TypeOf (exception) Is ValidationException Then
Me.txtErrorMessages.Text = exception.message
ctx.Server.ClearError()
End If
End Sub

The exception is being successfully caught, but at the end of the
process I'm served with an empty page. What I would like to have
happen is the page reloads with all the form's information in addition
to a textbox being populated with the exception's message. I tried
using response.redirect(), but of course the textbox does not get
populated.

I'd rather not redirect the user to an error page, I want them to be
able to fix the validation errors on the form and continue on from
there. What's the best way to tackle this?

Regards,

Chris
 
B

bruce barker

just create a custom validator and add to page.

CustomValidator cv = new CustomValidator();
cv.IsValid = false;
cv.ErrorMessage = "my error";
cv.Visible = true;
cv.Display = ValidatorDisplay.None;
this.Form.Control.Add(cv);


-- bruce (sqlwork.com)
 
H

hardieca

Thanks for the response, but I'm still getting served an empty page.
My handler now looks like this:

Private Sub Page_Error(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Error
Dim ctx As HttpContext = HttpContext.Current

Dim exception As Exception = ctx.Server.GetLastError()

If TypeOf (exception) Is ApplicationException Then
Dim cv As New CustomValidator()
cv.IsValid = False
cv.ID = "myCV"
cv.ErrorMessage = Exception.Message
cv.Visible = True
cv.Display = ValidatorDisplay.None
Me.Form.Controls.Add(cv)
End If

' --------------------------------------------------
' To let the page finish running we clear the error
' --------------------------------------------------
ctx.Server.ClearError()

End Sub

I would really like to figure out a way to validate and preserve the
form information in the Page_Error handler because I intend to have
the handler inherited by every page that has a form on it. I would
rather have this validation check performed in the Page_Error of the
base page class all my pages inherit from rather than have a Try/Catch
block on every page. Is there any way to do this?

Chris
 
B

bruce barker

if the Page Error event fires, page processing is cancelled. you are
supposed to redirect to the error page of your choice. clearing the
errors does not restart page processing.

you should be catching your BI validation errors in the calling method,
not at the page level.

-- bruce (sqlwork.com)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top