我有一些要在服务器上验证的字段(CustomValidator),它位于一个单独的用户控件中,而我的提交按钮位于不在用户控件中的页面中。
我所做的是,我将所有验证方法放在我的usercontrol(ascx.cs)后面的代码中,页面验证位于页面后面的代码中(aspx.cs)。我把它们放在相同的ValidationGroupName(字段和提交按钮)中。 usercontrol(ascx)是我的页面的子项(aspx)。我已将CauseValidation="true"
放置到我的按钮和UseSubmitBehavior="true"
。问题是它没有验证。这可能是什么问题?
注意:我无法将Button作为usercontrol的一部分。
在我的aspx页面中,按钮的click事件有this.Page.Validate(ValidationGroupName)
,我的所有验证器都在一个单独的控件(ascx)上的字段上,该控件是aspx页面的子项。
protected void Button1_Command(object sender, CommandEventArgs e)
{
if(e.CommandName.Equals("Validate", StringComparison.Ordinal))
{
this.Page.Validate("MyValidationGroup");
if(this.Page.IsValid)
{
// I'll change my View here.
}
}
}
我的按钮看起来像
<asp:Button ID="Button1" runat="server" UseSubmitBehavior="true" CommandName="Validate"
Text="Submit" OnCommand="Button1_Command" CausesValidation="true" ValidationGroup="MyValidationGroup" />
上面的代码段位于我的aspx页面中。
我试图在ascx页面上放置相同的按钮,它工作正常。我的想法是因为ascx页面在aspx页面下。当触发aspx页面上的按钮事件(Button1)时,不会触发ascx页面中的其余事件。我试图在按钮事件和验证器事件上放置断点,如果页面的按钮(aspx)是我点击的那个,它将不会停止在我的验证器事件上,如果控件上的按钮(ascx)我单击它将停止验证器事件。对此可以采取什么补救措施?
答案 0 :(得分:2)
您是否尝试在按钮点击事件中调用ucName.Page.Validate();
?
(其中ucName是您在标记中称为用户控件的任何内容)
编辑:确定以下这个简单的代码对我来说运行正常,我打破验证的唯一方法就是将我的用户控件设置为visible = false;你能发布更多的代码吗?
父页面标记:
<uc:ucTest id="ucName" runat="server">
<asp:Button ID="btnTest" runat="server" Text="Test validation" onclick="btnTest_Click" />
代码背后的代码:
protected void btnTest_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Response.Write("Hi!");
}
}
用户控制标记:
<asp:TextBox ID="txtDummy" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="*"
ControlToValidate="txtDummy"
onservervalidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>
代码背后的代码:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (txtDummy.Text.Length > 0)
{
args.IsValid = false;
}
}