【问题标题】:RequiredFieldValidator does not work under FirefoxRequiredFieldValidator 在 Firefox 下不起作用
【发布时间】:2010-02-24 18:09:44
【问题描述】:

我使用 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>

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

【问题讨论】:

    标签: asp.net requiredfieldvalidator autopostback


    【解决方案1】:

    我相信这是在下拉列表中使用 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 是一个好点),就像引用 Page.IsValidValidate()还没有被调用,Page.IsValid 抛出一个严重的异常......

    如果您想消除自动回发的闪烁,您还可以使用 ajax UpdatePanel 让用户无缝处理。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的快速回答,但仍然无法正常工作。我仍然需要先选择 ddlMod 才能工作。我不知道为什么会这样,因为在 IE 下它工作得很好。我还能尝试什么?感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多