Проверка игнорируется PostBackUrl или Response.Redirect с использованием C#
У меня есть форма с некоторой пользовательской проверкой. В форме есть кнопка, которая должна перевести пользователя на "страницу подтверждения", чтобы показать все детали заказа.
Проверка на странице
<asp:TextBox ID="txtBillingLastName" Name="txtBillingLastName"
runat="server" CssClass="txtbxln required"></asp:TextBox>
<asp:CustomValidator
ID="CustomValidatorBillLN" runat="server"
ControlToValidate="txtBillingLastName"
OnServerValidate="CustomValidatorBillLN_ServerValidate"
ValidateEmptyText="True">
</asp:CustomValidator>
Код валидатора позади
protected void CustomValidatorBillLN_ServerValidate(object sender, ServerValidateEventArgs args)
{
args.IsValid = isValid(txtBillingLastName);
}
Однако, если я добавлю PostBackUrl или Response.Redirect к методу onclick кнопки, все элементы проверки будут игнорироваться.
Я мог бы вызвать все методы проверки с помощью метода onclick, но это кажется не элегантным решением.
Я попытался установить CausesValidation=False без удачи.
Какие-либо предложения?
2 ответа
Конечно, эта проверка игнорируется, если вы перенаправляете безоговорочно. Вам следует позвонить this.IsValid
прежде чем перенаправить, как
protected btRedirect_Click( object sender, EventArgs e )
{
if ( this.IsValid )
Response.Redirect( ... );
}
Проверьте этот код
void ValidateBtn_OnClick(object sender, EventArgs e)
{
// Display whether the page passed validation.
if (Page.IsValid)
{
Message.Text = "Page is valid.";
}
else
{
Message.Text = "Page is not valid!";
}
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
// Test whether the value entered into the text box is even.
int i = int.Parse(args.Value);
args.IsValid = ((i%2) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
И HTML-код стороны
<form id="Form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Name="Verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Name="verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
Для получения дополнительной информации проверьте Custom validator
Надеюсь, мой ответ поможет вам решить вашу проблему.