从函数背后的代码调用JS函数

时间:2014-02-05 08:35:07

标签: c# javascript asp.net

我有一个JS功能(显示警告框),并在ASP页面中有一个链接按钮,在此链接按钮后面的代码点击事件我要调用此功能,然后重定向到某个页面。

ASP代码

 <script type="text/javascript" language="javascript">
     function myFunction() {
         // executes when HTML-Document is loaded and DOM is ready
         alert("document is ready!");
     }                   
 </script>
 <div>
     <asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClick="lnkbtnChangePassword_Click" ></asp:LinkButton>
 </div>

C#代码

 protected void lnkbtnChangePassword_Click(object sender, EventArgs e)
 {
     ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "myFunction()", true);
     Response.Redirect("myPage.aspx");
 }

当我点击链接按钮时,它只是不显示提醒框/窗口并重定向到该页面。

4 个答案:

答案 0 :(得分:2)

您应该使用LinkButton.ClientClick代替LinkButton.Click事件。

Click事件在服务器上处理。当用户单击该按钮时,页面将回发到服务器,代码将在服务器端执行。

ClientClick事件实际上是应该执行的JavaScript函数的名称。

你应该做这样的事情:

<asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClientClick="showMyAlertAndSubmit()"></asp:LinkButton>

<script type="text/javascript">
function showMyAlertAndSubmit(){
    alert("Your password is being changed");
    // submit your form
}
</script>

为什么您当前的代码不起作用

您目前发送用于显示消息的脚本,并同时重定向。这意味着浏览器会收到显示消息和重定向的说明,并在显示消息之前重定向用户。一种方法可能是从客户端重定向。例如:

 protected void lnkbtnChangePassword_Click(object sender, EventArgs e)
 {
     ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "myFunction()", true);
 }

并在客户端

function myFunction() {
    // show your message here
    // do other things you need
    // and then redirect here. Don't redirect from server side with Response.Redirect
    window.location = "http://myserver/myPage.aspx";
}

其他选项

由于在保存数据和重定向之前需要先在服务器端执行检查,因此可以使用ajax来调用服务器而不执行回发。 删除Click处理程序,仅使用ClientClick:

function myFunction() {
    $.ajax({
      type: "POST",
      url: "myPage.aspx/MyCheckMethod",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
          ShowAlert();
          window.location = "http://myserver/mypage.aspx";
      }
    });
}

有关详情please check this tutorial

答案 1 :(得分:1)

更改您的代码:

ASP代码

<script type="text/javascript" language="javascript">
  function myFunction() {
     // executes when HTML-Document is loaded and DOM is ready
     alert("document is ready!");
    }                   
</script>
<div>
     <asp:LinkButton ID="lnkbtnChangePassword" runat="server" Text="Change Passwrod" OnClick="lnkbtnChangePassword_Click" OnClientClick="myFunction()" ></asp:LinkButton>
</div>

C#代码

protected void lnkbtnChangePassword_Click(object sender, EventArgs e)
{
    Response.Redirect("myPage.aspx");
}

答案 2 :(得分:1)

将您的javascript功能更改为:

<script type="text/javascript" language="javascript">
     function myFunction() {
         // alert will stop js execution
         alert("document is ready!");
         // then reload your page
         __doPostBack('pagename','parameter');
     }                   
 </script>

使用此函数从代码隐藏中调用它:

protected void lnkbtnChangePassword_Click(object sender, EventArgs e)
 {
     //do your job here
     //then call your js function
     ScriptManager.RegisterStartupScript(this,this.GetType(), "CallMyFunction", "myFunction();", true);
 }

答案 3 :(得分:0)

您缺少的是等待弹出的JavaScript警告对话框,然后重定向到该页面。 为了做到这一点,你需要告诉按钮等待弹出的JavaScript警告对话框,然后在服务器端工作。

ASPX:

<head runat="server">
    <title></title>
    <script type="text/javascript">
        function alertBeforeSubmit() {
           return alert('Document Ready');
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button Text="Do" runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" OnClientClick="return alertBeforeSubmit();" />
    </div>
    </form>
</body>

CS:

 protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default.aspx");
    }