为什么ScriptManager在ASP.NET(Web窗体)中的RequiredFieldValidator上导致回发? [英] Why ScriptManager causes postback on RequiredFieldValidator in ASP.NET (Web Forms)?

查看:59
本文介绍了为什么ScriptManager在ASP.NET(Web窗体)中的RequiredFieldValidator上导致回发?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在添加 ScriptManager 时,当我单击登录按钮时,它显示了必填字段警告,没有页面 postback ,但是此后它开始执行回发,然后验证字段.

页面上有 UpdatePanel 时,需要添加 ScriptManager .

如何解决此问题,以免在 RequiredFieldValidator 回发?

登录页面

 < form id ="signinform" runat ="server" defaultfocus ="username" defaultbutton ="LogInBtn">< asp:scriptmanager id ="FormScriptManager" runat ="server"></asp:scriptmanager>< div class ="form-signup">< div class ="form-group form-group-info">< div class ="append-icon m-b-30">< asp:textbox id ="username" runat ="server" cssclass ="form-control c-white form-control-success" placeholder ="Username"/>< i class ="mdi-action-perm-identity c-light"</i>< asp:requiredfieldvalidator runat ="server" id ="UserNameValidator" controltovalidate ="username" display ="Dynamic" validationgroup ="LoginVAL" setfocusonerror ="true" cssclass ="f-11 c-red mb-0" errormesssage =用户名是必需的."/></div></div>< div class ="form-group form-group-info">< div class ="append-icon m-b-30">< asp:textbox id ="Password" textmode ="Password" runat ="server" cssclass ="form-control c-white form-control-success" placeholder ="Password"/>< i class ="mdi-action-lock-outline c-light"</i>< asp:requiredfieldvalidator runat =服务器" id ="PasswordValidator" controltovalidate =密码" display =动态" setfocusonerror ="true" validationgroup ="LoginVAL" cssclass ="f-11 c-red mb-0" errormesssage =密码是必需的."/></div></div>< div class ="togglebutton togglebutton-info">< label class ="c-light normal f-11 m-b-15">< input type ="checkbox" runat ="server" name ="RememberMe" id ="RememberMe" class ="md-checkbox">记得我?</label></div></div>< asp:placeholder runat ="server" id ="ErrorMessage" visible ="false" viewstatemode ="Disabled">< p id ="ErrorMessageContainer" runat ="server" class ="badge badge-danger m-b-5 f-11">< asp:常规runat ="server" ID ="FailureText" ViewStateMode ="Disabled"/></p></asp:占位符>< div class ="progress-demo">< asp:linkbutton id ="LogInBtn" runat ="server" onclick ="LogIn" text ="Login" cssclass ="btn btn-material-indigo btn-block btn-embods ladda-button" validationgroup ="LoginVAL"数据-style ="zoom-in"></asp:linkbutton></div>< p><%-在启用密码重置功能的帐户确认后启用此功能-%>< asp:hyperlink runat ="server" id ="ForgotPasswordHyperLink" viewstatemode ="Disabled">忘记密码了?</asp:hyperlink></p>< div class ="modal fade" id ="LoginModal" tabindex =-1" role ="dialog" aria-hidden ="true" data-backdrop ="static" data-keyboard ="false">< div class ="modal-dialog">< div class ="modal-content">< div id ="LoginModalHeader" runat ="server" class ="modal-header bg-aero">< button type ="button" class ="close" data-dismiss ="modal" aria-hidden ="true">< i class ="icons-office-52"></i></button>< h4 class ="modal-title c-white">< asp:label id ="LoginModalTitle" runat ="server"/></h4></div>< asp:updatepanel id ="LoginModalUpdatePanel" runat ="server">< ContentTemplate>< div class ="modal-body m-t-10">< p class ="c-gray w-300 f-13">< asp:标签ID ="LoginModalDetails" runat ="server"/></p></div>< div class ="modal-footer">< asp:LinkBut​​ton runat ="server" ID ="ResendConfirm" OnClick ="SendEmailConfirmationToken" Text ="Resend Confirmation" Visible ="false" CssClass ="btn btn btn-material-blue-grey btn-embossed"/>< button id ="LoginModalCancel" runat ="server" type ="button" class ="btn btn-default btn-embossed" data-dismiss ="modal"> Cancel</button></div></ContentTemplate></asp:updatepanel></div></div></div></form> 

感谢您为解决我的问题而付出的努力.

解决方案

我前一段时间遇到相同的问题,并且能够通过 Page.Validate(); 来解决.>

基本上,在我添加ScriptManager之前,一切工作正常.当我单击更新按钮时,字段验证器将运行并阻止回发,直到满足要求为止.添加ScriptManager标记后,页面将回发渲染我的验证器几乎没有用.

我所做的就是添加我的更新(提交)按钮单击事件:

  page.validate();如果(Page.IsValid){//您的更新或在此处提交代码.} 

这似乎很好!

Before adding the ScriptManager when I was clicking on the login button it was showing the required field warning without page postback but after that it has started to do postback first and then validate fields.

It's required to add a ScriptManager when there is an UpdatePanel on the page.

How can I fix this so it doesn't postback on RequiredFieldValidator?

Login Page

<form id="signinform" runat="server" defaultfocus="username" defaultbutton="LogInBtn">

    <asp:scriptmanager id="FormScriptManager" runat="server"></asp:scriptmanager>

    <div class="form-signup">

        <div class="form-group form-group-info">
            <div class="append-icon m-b-30">
                <asp:textbox id="username" runat="server" cssclass="form-control c-white form-control-success" placeholder="Username" />
                <i class="mdi-action-perm-identity c-light"></i>
                <asp:requiredfieldvalidator runat="server" id="UserNameValidator" controltovalidate="username" display="Dynamic" validationgroup="LoginVAL" setfocusonerror="true" cssclass=" f-11 c-red m-b-0" errormessage="The username is required." />
            </div>
        </div>

        <div class="form-group form-group-info">
            <div class="append-icon m-b-30">
                <asp:textbox id="Password" textmode="Password" runat="server" cssclass="form-control c-white form-control-success" placeholder="Password" />
                <i class=" mdi-action-lock-outline c-light"></i>
                <asp:requiredfieldvalidator runat="server" id="PasswordValidator" controltovalidate="Password" display="Dynamic" setfocusonerror="true" validationgroup="LoginVAL" cssclass="f-11 c-red m-b-0" errormessage="The password is required." />
            </div>
        </div>

        <div class="togglebutton togglebutton-info">
            <label class="c-light normal f-11 m-b-15">
                <input type="checkbox" runat="server" name="RememberMe" id="RememberMe" class="md-checkbox">
                Remember me?
            </label>
        </div>
    </div>

    <asp:placeholder runat="server" id="ErrorMessage" visible="false" viewstatemode="Disabled">
        <p id="ErrorMessageContainer" runat="server" class="badge badge-danger m-b-5 f-11">
            <asp:Literal runat="server" ID="FailureText" ViewStateMode="Disabled" />
        </p>
    </asp:placeholder>

    <div class="progress-demo">
        <asp:linkbutton id="LogInBtn" runat="server" onclick="LogIn" text="Login" cssclass="btn btn-material-indigo btn-block btn-embossed ladda-button" validationgroup="LoginVAL" data-style="zoom-in"></asp:linkbutton>
    </div>

    <p>
        <%--   Enable this once you have account confirmation enabled for password reset functionality--%>
        <asp:hyperlink runat="server" id="ForgotPasswordHyperLink" viewstatemode="Disabled">Forgot your password?</asp:hyperlink>
    </p>


    <div class="modal fade" id="LoginModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false">
        <div class="modal-dialog">
            <div class="modal-content">
                <div id="LoginModalHeader" runat="server" class="modal-header bg-aero">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icons-office-52"></i></button>
                    <h4 class="modal-title c-white">
                        <asp:label id="LoginModalTitle" runat="server" />
                    </h4>
                </div>

                <asp:updatepanel id="LoginModalUpdatePanel" runat="server">
                    <ContentTemplate>

                        <div class="modal-body m-t-10">
                            <p class=" c-gray w-300 f-13"><asp:Label ID="LoginModalDetails" runat="server" /></p>
                        </div>
                        <div class="modal-footer">
                            <asp:LinkButton runat="server" ID="ResendConfirm" OnClick="SendEmailConfirmationToken" Text="Resend Confirmation" Visible="false" CssClass="btn btn-material-blue-grey btn-embossed" />
                            <button id="LoginModalCancel" runat="server" type="button" class="btn btn-default btn-embossed" data-dismiss="modal">Cancel</button>
                        </div>

                    </ContentTemplate>
                    </asp:updatepanel>

            </div>
        </div>
    </div>

</form>

I appreciate your efforts in reaching a solution for my problem.

解决方案

I came across the same issue a while back and was able to resolve it via Page.Validate();.

Basically, before I added ScriptManager everything was working well. When I would click the update button, the field validators would run and prevent a post back until requirements were met. After adding ScriptManager tag, the page would post back rendering my validators pretty much useless.

What I did was add on my update (submit) button click event:

page.validate();
if (Page.IsValid)
{
    // Your update or submit code here.
}

This seems to work fine!

这篇关于为什么ScriptManager在ASP.NET(Web窗体)中的RequiredFieldValidator上导致回发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆