如何从asp.net方法调用客户端方法?

时间:2009-03-19 21:12:47

标签: asp.net jquery jquery-ui

我有以下javascript:

<script type="text/javascript">
    function showjQueryDialog() {
        $("#dialog").dialog("open");
    }

    $(document).ready(function() {
        $("#dialog").dialog({
           autoOpen: false,
           modal: true,
           buttons: { "Renew Membership": function() { $(this).dialog("close"); } }
        });
    });
</script>

我在页面上有一个asp:按钮,用于记录用户。这是在服务器端单击按钮时我想要发生的示例:

protected void LoginButton_OnClick(object sender, EventArgs e)
{
    UserProfile profile = UserProfile.GetUserProfile(txtUserName.Text);

    TimeSpan ts = profile.Expiration.Subtract(DateTime.Now);

    if(ts.Days <= 30)
      //call showJQueryDialog() to open the dialog box
      Page.ClientScript.RegisterStartupScript(typeof(Login2), "showjquery",   
      "showJQueryDialog();", true);
    else
     //log the user in as normal.

}

此外,我如何将对话框中的更新按钮附加如下方法

public void Renew()
{
    Response.Redirect("Renew.aspx");
}

5 个答案:

答案 0 :(得分:3)

if(ts.Days <= 30)
    ScriptManager.RegisterStartupScript(
        typeof(MyPage), "showjquery", 
        "$(document).ready(function() { showJQueryDialog(); };", 
        true
    )
else
     //log the user in as normal.

将其放在您拥有的位置://调用showJQueryDialog()打开对话框

更新1:您似乎在使用更新面板,在这种情况下您需要使用ScriptManager.RegisterStartupScript

更新2:您还希望在jquery .ready调用中包装js调用,因此在配置对话框之前不会触发它。这比连接正文onload更好,因为onload会等待加载图像。所以.ready会更快显示(取决于图像和其他信息加载)。

答案 1 :(得分:3)

由于无法调用客户端功能,我建议在javascript中发出决策所需的信息,并在客户端进行所有操作。

或者,您可以根据之前的评论者的建议进行页面重新加载。

答案 2 :(得分:1)

我会保留一个隐藏的LinkBut​​ton,然后在javascript中调用__doPostBack方法。

<asp:LinkButton runat="server" ID="Renew" OnClick="Renew_Click" style="display:none" />

<强>的jQuery

$(document).ready(function() {
    $("#dialog").dialog({
       autoOpen: false,
       modal: true,
       buttons: { "Renew Membership": function() { 
          $(this).dialog("close"); 
          __doPostBack('Renew', '');
         // or if inside a master page something like this
          __doPostBack('ctl00$ContentPlaceHolder1$Renew', '');
       } }
    });
});

答案 3 :(得分:1)

我真的不明白弗雷迪对此的态度。我误解了一些可能的东西。就像我看到的那样,这里只有两种可能,正如devdimi指出的那样。之一:

a)在客户端onClick javascript中执行所有逻辑。您可以调用一个AJAX方法在服务器端OnClick中执行操作,然后在AJAX回调中调用您的jQuery弹出窗口。

b)做回发,处理服务器端OnClick,然后为正在运行的onLoad事件中的页面附加javascript:

body.Attributes.Add(“onLoad”,“showJQueryDialog();”)

答案 4 :(得分:0)

我对IE8有一些类似的问题。

我们正在使用ASP.NET,并且只要我们在PageLoad / Control-Events IE8中执行Response.Redirect,就会将所有基本DOM对象设置为undefined(图像,窗口,文档) 但是如果我们在PreInit事件期间进行重定向,那么IE8就可以了。可爱的