繁体   English   中英

JavaScript方法未从后端调用

[英]JavaScript method is not calling from backend

在我的页面中,我有一个登录控件:

<asp:Login ID="EMSLogin" runat="server" OnAuthenticate="EMSLogin_Authenticate">
    <LayoutTemplate>
        <asp:Panel ID="Panel1" runat="server" CssClass="wrapper">
            <asp:Panel ID="Panel2" runat="server" CssClass="holder">
                <asp:Panel ID="Panel3" runat="server" CssClass="loginBox one_edge_shadow">
                    <h1>
                        Login Credentials</h1>
                    <asp:Panel ID="Panel4" runat="server" CssClass="name topmargin">
                        <asp:Panel ID="Panel5" runat="server" CssClass="label">
                            <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">User Name:</asp:Label>
                        </asp:Panel>
                        <asp:Panel ID="Panel6" runat="server" CssClass="textBox">
                            <telerik:RadTextBox ID="UserName" runat="server" Height="16px" Width="165px" Font-Size="14px"
                                Font-Names="Arial Sans-Serif" ToolTip="Enter your valid login name" />
                            <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                ValidationGroup="EMSLogin">*</asp:RequiredFieldValidator>
                        </asp:Panel>
                        <br class="clearfix" />
                    </asp:Panel>
                    <asp:Panel ID="Panel7" runat="server" CssClass="name topmargin">
                        <asp:Panel ID="Panel8" runat="server" CssClass="label">
                            <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
                        </asp:Panel>
                        <asp:Panel ID="Panel9" runat="server" CssClass="textBox">
                            <telerik:RadTextBox ID="Password" runat="server" TextMode="Password" Height="16px"
                                Width="165px" Font-Size="14px" Font-Names="Arial Sans-Serif" ToolTip="Enter your valid password" />
                            <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                ValidationGroup="EMSLogin">*</asp:RequiredFieldValidator>
                        </asp:Panel>
                        <br class="clearfix" />
                        <telerik:RadButton ID="LoginButton" runat="server" CommandName="Login" Text="Log In"
                            CssClass="loginButton" Font-Size="14px" Width="100px" ValidationGroup="EMSLogin"
                            ToolTip="Click to log in" />
                    </asp:Panel>
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </LayoutTemplate>
</asp:Login>

我已将ScriptManager控件添加到页面中。

现在, EMSLogin_Authenticate是:

protected void EMSLogin_Authenticate(object sender, AuthenticateEventArgs e) {
    RadTextBox UserName = EMSLogin.FindControl("UserName") as RadTextBox;
    RadTextBox Password = EMSLogin.FindControl("Password") as RadTextBox;

    if (Membership.ValidateUser(UserName.Text, Password.Text)) {
       FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
    } else {
       Page.ClientScript.RegisterClientScriptBlock(typeof(ScriptManager), "CallShowDialog", "showDialog();", true);     
    }
}

JavaScript方法showDialog(); 在页面中定义:

<script type="text/javascript">
    function showDialog() {
        $(".jym").dialog("open");
        return false;
    }   
</script>

但这不是召唤。 showDialog()没有任何问题,因为我已经在锚标记的onclick方法上调用了它; 它显示对话框。 如果我在后面的代码中写了alert()代替showDialog() ,那么我会看到警报消息。

我做错了什么? 这样无法调用JavaScript吗?


这也不起作用:

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this.Page, typeof(RadButton), Guid.NewGuid().ToString(), "showDialog();", true);

RegisterClientScriptBlock将代码放在文档之前,因此在您调用该函数时,尚没有jym类的元素。 您可以添加alert($(".jym").length)确认,您将看到0。

为什么不从客户端调用该函数?

$(document).ready(function() {
    showDialog();
});

如果需要服务器端,只需将代码更改为:

if (Membership.ValidateUser(UserName.Text, Password.Text)) {
   FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
} else {
   Page.ClientScript.RegisterClientScriptBlock(typeof(ScriptManager), "CallShowDialog", "$(document).ready(function() { showDialog(); });", true);     
}

几个问题:

  1. 在页面标题中声明了showDialog吗?
  2. 该函数是否位于正确的脚本标记中:

  3. 尝试重新设置RegisterClientScriptBlock命令:

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(),“ CallShowDialog”,“ showDialog();”);

我认为您不需要超载来添加脚本标签。

如果您使用的是RadAjaxManager,则必须使用以下命令:

RadAjaxManager.GetCurrent(Page).ResponseScripts.Add("showDialog();");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM