RequiredFieldValidator在firefox下无法运行

时间:2010-02-24 18:09:45

标签: asp.net requiredfieldvalidator autopostback

大家好我使用2个requiredfiledvalidator进行2次选择,一个正在工作,但第二个(我需要的那个)不是

    <asp:dropdownlist id="ddlMod" runat="server" Width="235px" AutoPostBack="True" Font-Names="Arial" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Mod" InitialValue="00" Display="Dynamic" ControlToValidate="ddlMod">
</asp:requiredfieldvalidator>

<asp:dropdownlist id="ddlInd" runat="server" Width="235px" AutoPostBack="True" Font-Size="XX-Small">
</asp:dropdownlist>
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" Font-Names="Arial" Font-Size="XX-Small"
ErrorMessage="Select Ind" InitialValue="0" Display="Dynamic" ControlToValidate="ddlInd">
</asp:requiredfieldvalidator>

如果我选择第二个,我可以看到第一个的错误信息,但是如果我不选择任何一个或者如果我选择第一个,我看不到任何消息。 谢谢!

1 个答案:

答案 0 :(得分:0)

我相信这是使用下拉列表中的AutoPostBack="true"属性的已知asp.net限制。 AutoPostBack属性会否定验证过程并回发。

作为一种简单的解决方法,您可以通过修改页面加载事件在回发期间进行验证:

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();
}

这将导致在AutoPostBack情况之后仍然发生验证。如果下拉列表值不正确,页面将刷新,并显示按预期显示的错误消息。缺点是屏幕会闪烁,等等。但是,唯一的另一个选择是为每个DropDownList控件添加自定义客户端验证脚本,我个人认为这不值得。

使用上面的代码,请记住,当页面自动回发时,它实际上可能无效 - 但您可能调用的其他方法可能期望有效页面。使用Page.IsValid属性来防止这种情况。 (对于经过验证的表格,使用Page.IsValid实际上是最佳做法。)

示例:

protected void Page_Load(object sender, EventArgs e)
{
    if(Page.IsPostBack)
        Page.Validate();

    ddlMod.SelectedIndexChanged += new EventHandler(ddlMod_SelectedIndexChanged);

    if(Page.IsValid)
    {
        //load some data; do some things...
    }
}

protected void ddlMod_SelectedIndexChanged(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        //do some stuff if the page validated
    }
}

最后一个注意事项 - 您需要确保在页面生命周期的早期调用Page.Validate()Page_Load是一个好点),就像您引用{{1 }}和Page.IsValid尚未被调用,Validate()会引发一个非常讨厌的例外......

如果您想摆脱自动回发中的闪烁,您还可以使用ajax Page.IsValid为用户提供无缝连接。

希望这有帮助!