如何避免在asp.net中的按钮单击事件后页面刷新
Posted
技术标签:
【中文标题】如何避免在asp.net中的按钮单击事件后页面刷新【英文标题】:How to avoid page refresh after button click event in asp.net 【发布时间】:2014-02-15 00:09:44 【问题描述】:这是以下代码,一旦 btninsert 点击事件完成,页面就会刷新我想在点击 btninsert 后停止页面刷新
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div style="margin-bottom: 20px; margin-top: 20px;"><span><strong style="font-size: large;">Edit User</strong></span></div>
<div>
<span style="float: left; width: 50%;"> </span> <span style="float: left; width: 50%;">
<span style="width: 100%; float: left; text-align: right;">
<asp:Label ID="lblMessage" runat="server" Text="-"></asp:Label></span>
</span>
</div>
<div style="width: 100%; float: left;">
<hr />
</div>
<div style="width: 816px; margin-left: 5px; margin-top: 20px; height: 463px;">
<div style="width: 100%; float: left; padding-top: 15px; height: 257px; margin-left: 0px;">
<span class="Divide">
<span class="simDivide1">FullName</span>
<span class="simDivide">
<asp:TextBox ID="txtfullname" runat="server" Width="180px">
</asp:TextBox>
</span>
</span>
<span class="Divide">
<span class="simDivide1"></span>
<span class="simDivide"></span>
</span>
<span class="Divide">
<span class="simDivide1">Username</span>
<span class="simDivide">
<asp:TextBox ID="txtusername" runat="server" Width="180px">
</asp:TextBox>
</span>
</span>
<span class="Divide">
<span class="simDivide1"></span>
<span class="simDivide"></span>
</span>
<span class="Divide">
<span class="simDivide1">Password</span>
<span class="simDivide">
<asp:TextBox ID="txtpassword" runat="server" Width="180px">
</asp:TextBox>
</span>
</span>
<span class="Divide">
<span class="simDivide1"></span>
<span class="simDivide"></span>
</span>
<span class="Divide">
<span class="simDivide1">Mobile No
</span>
<span class="simDivide"><asp:TextBox ID="txtmobileno" runat="server" Width="180px">
</asp:TextBox>
</span>
</span>
<span class="Divide">
<span class="simDivide"></span>
</span>
<span class="Divide">
<span class="simDivide1">Role
</span>
<span class="simDivide"><asp:TextBox ID="txtrole" runat="server" Width="180px">
</asp:TextBox>
</span>
</span>
<script src="jquery-2.0.2.js"></script>
<script language="javascript">
function done()
var list = document.getElementById("tid");
list.removeChild(list.lastChild);
function changecourse(e)
var change = document.getElementById('mytext').value;
var i = 1;
mNewObj = document.createElement('div');
mNewObj.id = "BOX" + i;
mNewObj.style.visibility = "show";
mNewObj.innerhtml = change + " <a href='#' style='text-decoration: none; color:red' onClick='done()'> x </a> ";
document.getElementById("tid").appendChild(mNewObj);
i++
var a = document.getElementById('mytext').selectedIndex;
document.getElementById("ContentPlaceHolder1_Hidden1").value = a;
//document.getElementById("ContentPlaceHolder1_btninsert").click();
deleted();
function yes()
$("#ContentPlaceHolder1_btninsert").click();
//function insert()
// $.ajax(
// type: "POST",
// url: "Edituser.aspx.cs/insert",
// success: function () alert('success'); ,
// error: function () alert('error');
// );
//
function cancel()
var select = document.getElementById('mytext');
select.remove(select.selectedIndex);
function deleted()
document.getElementById("mytext").style.display = 'none';
document.getElementById("Button1").style.display = 'none';
document.getElementById("tid").style.display = 'inline';
document.getElementById("mylink").style.display = 'inline';
function showdiv()
document.getElementById("mylink").style.display = 'none';
document.getElementById("mytext").style.display = 'inline';
document.getElementById("Button1").style.display = 'inline';
</script>
<input id="Hidden1" type="hidden" runat="server" />
</div>
<asp:Button ID="btnUpdate" runat="server" OnClick="btnUpdate_Click" Style="margin-left: 5px" Text="Edit" Width="39px" />
<br>
<br>
<asp:UpdatePanel runat="server">
<ContentTemplate>
    <div id="tid" >
</div>
<div id="di">
<a id="mylink" onclick="showdiv()">Add Depot</a>
<select id='mytext' name='mytext' style="display: none">
<option>--Select--</option>
<option>Mumbai</option>
<option>Delhi</option>
<option>Banglore</option>
<option>Ahmedabad</option>
</select>
<input type="button" id="Button1" style="display: none" onclick=" changecourse(); yes(); cancel(); return false;" value="add" />
</div>
<asp:Button ID="btninsert" runat="server" Style="display: none" OnClick="btninsert_Click" Text="Insert" ValidationGroup="C" />
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</asp:UpdatePanel>
这是我有方法的 Edit.aspx.cs
protected void btninsert_Click(object sender, EventArgs e)
string a = Hidden1.Value;
string UserId = Convert.ToString(Session["LoginId"]);
con.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO UserDepot (UserId,DepotId)" +
"VALUES ('" + UserId + "','" + a + "')", con);
cmd.ExecuteNonQuery();
con.Close();
【问题讨论】:
为什么要停止页面刷新???如果你这样做,那么你的 SqlCommand 将不会被执行......你是想维护页面的值还是什么? 【参考方案1】:添加OnClientClick="return false;"
,
<asp:button ID="btninsert" runat="server" text="Button" OnClientClick="return false;" />
或在 CodeBehind 中:
btninsert.Attributes.Add("onclick", "return false;");
【讨论】:
它也不会调用该函数。 这行得通。应该标记为解决方案。但是,为了减少混淆,该示例也应包含该函数: 【参考方案2】:当您使用asp:Button
这是一个服务器控件时,会发生回发以避免使用html
按钮,
asp:Button .... />
键入到
input type="button" .... />
【讨论】:
【参考方案3】:如果您的 Page_Load 方法中有一些代码,并且您不希望在单击按钮后执行这些代码,请在 Page_Load 上使用 if(!IsPostBack)
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
// put codes here
asp:Button 是一个服务器控件,用于向服务器发送请求并获得响应需要刷新页面。您可以使用 JQuery 和 Ajax 来防止整个页面刷新
【讨论】:
【参考方案4】:页面在访问服务器时刷新,并且像 Button 这样的服务器控件默认具有属性 AutoPostback = true,这意味着无论何时单击它们都会访问服务器将被制作。 为插入按钮设置 AutoPostback = false,这将为您解决问题。
【讨论】:
坦率地说,带有 AutoPostback = false 的按钮被冻结,即除非您决定在其点击事件中发送 Ajax 调用,否则它无法执行任何操作。请检查您的按钮是否在另一个服务器控件中?如果是,那么该控件将负责页面刷新。【参考方案5】:在页面声明中设置MaintainScrollPositionOnPostBack="true"
:
<%@ Page Language="C#" MaintainScrollPositionOnPostBack="true" Title="Home" %>
【讨论】:
OP 表示他们想停止页面刷新,而不是记住滚动位置。为什么建议这样做?【参考方案6】:我想我也有这个问题,我试图在单击按钮后使日历可见,但单击按钮后页面不断刷新
MaintainScrollPositionOnPostBack="true"
这实际上回答了我的问题。
我不能投票或评论,我今天才加入 SO
【讨论】:
这不是答案 在页面声明中设置 MaintainScrollPositionOnPostBack="true": 这已经被建议我尝试过并且它有效 然而这不是问题的答案,因为页面仍在刷新【参考方案7】:在执行实际的 button_click 事件之前,我在刷新页面时遇到了同样的问题(因此必须单击该按钮两次)。 此行为发生在 server.transfer-command (server.transfer("testpage.aspx") 之后。
在这种情况下,解决方案是将 server.transfer-command 替换为 response-redirect (response.redirect("testpage.aspx")。
有关这两个命令之间差异的详细信息,请参阅 Server.Transfer Vs. Response.Redirect
【讨论】:
【参考方案8】:html
"input type ="text" id="txtnothing" runat ="server" "
java脚本
var txt = document.getElementById("txtnothing");
txt.value = Date.now();
代码
If Not (Session("txtnothing") Is Nothing OrElse String.IsNullOrEmpty(Session("txtnothing"))) Then
If Session("txtnothing") = txtnothing.Value Then
lblMsg.Text = "Please try again not a valid request"
Exit Sub
End If
End If
Session("txtnothing") = txtnothing.Value
【讨论】:
请使用 Ctrl+K 将您的代码原样停放。它将使其更易于阅读和理解。【参考方案9】:在按钮单击事件完成您的任何任务后...最后一行复制并过去...工作正常...Asp.Net 中的 C#
Page.Header.Controls.Add(new LiteralControl(string.Format(@" ", Request.Url.AbsoluteUri)));
【讨论】:
【参考方案10】:当必须向下滚动网格视图以选择一行时,MaintainScrollPositionOnPostBack="true"
将使其在选择该行后继续显示该行。
【讨论】:
此答案不会阻止页面刷新,也不会在其他两个答案之外使用完全相同的代码提供任何新内容。以上是关于如何避免在asp.net中的按钮单击事件后页面刷新的主要内容,如果未能解决你的问题,请参考以下文章