JavaScript方法不是从后端调用

时间:2012-03-25 12:23:56

标签: c# javascript asp.net

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

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

3 个答案:

答案 0 :(得分:3)

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 :(得分:0)

几个问题:

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

     
  3. 尝试改进RegisterClientScriptBlock命令:

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

  4. 我认为你不需要重载来添加脚本标签。

答案 2 :(得分:0)

如果你正在使用RadAjaxManager,你必须使用它:

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