我有一个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");
}
当我点击链接按钮时,它只是不显示提醒框/窗口并重定向到该页面。
答案 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";
}
});
}
答案 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");
}