开发者

RequiredFieldValidator does not work under Firefox

I use 2 requiredfiledvalidator for 2 selects, one is working but the second one (the one I need) is not:

    <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>

If I select the 2nd one, I can see the error message for the 1st one. But I can't see any message if I don't select any or if I select t开发者_开发百科he 1st one.


I believe this is a known asp.net limitation of using the AutoPostBack="true" property on the dropdown lists. The AutoPostBack property negates the validation process and posts back.

As a simple workaround, you can cause the validation to occur during the postback by modifying the page load event:

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

This will cause the validation to still occur after an AutoPostBack situation. If the drop down list values are incorrect, the page will refresh with the error messages shown as expected. The downside is that the screen will flicker, etc. but afaik the only other option is to add custom client-side validation scripting to each DropDownList control which I personally don't think is worth it.

With the above code, remember that when the page automatically posts back, it could actually be invalid - yet other methods you may have called might be expecting a valid page. Use the Page.IsValid property to protected against this. (Use of Page.IsValid is actually best practice anyway for validated forms.)

Example:

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
    }
}

One final note - you will want to make sure Page.Validate() is called early in the page lifecycle (Page_Load is a good point) as if you reference Page.IsValid and Validate() has not yet been called, Page.IsValid with throw a big nasty exception...

If you want to get rid of the flicker from the auto postback, you could also use an ajax UpdatePanel to make things seamless to the user.

Hope this helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜