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
bruce barker - 30 Jul 2007 17:18 GMT
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)
> Hi,
>
[quoted text clipped - 31 lines]
>
> Chris
hardieca@hotmail.com - 30 Jul 2007 17:42 GMT
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
> just create a custom validator and add to page.
>
[quoted text clipped - 43 lines]
>
> > Chris
bruce barker - 30 Jul 2007 21:07 GMT
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)
> Thanks for the response, but I'm still getting served an empty page.
> My handler now looks like this:
[quoted text clipped - 69 lines]
>>> Regards,
>>> Chris