按钮单击ASP.NET后禁用页面刷新

use*_*285 4 asp.net postback button

我有一个asp按钮,看起来像这样:

Default.aspx的

<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
Run Code Online (Sandbox Code Playgroud)

Default.aspx.cs

protected void function(object sender EventArgs e)
{
    // Do some calculation
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我按下按钮,整个页面都会刷新.我查看了这个网站并找到了很多解决方案,但它们都没有真正适用于我的项目.以下是一些建议的解决方案:

  1. set onclick ="return false;" //但是我如何在代码隐藏中运行该函数?
  2. 在Page_Load中使用!IsPostBack //但页面仍然完全刷新.我根本不想调用Page_Load.
  3. 禁用AutoEventWireup.//使这个真或假并没有什么不同.

有没有人有解决方案,或者它真的不可能?

pso*_*hmo 8

我会将控件放在Update面板中.要做到这一点,你还需要一个脚本管理器,所以像这样:

 <asp:ScriptManager runat="server" ID="sm">
 </asp:ScriptManager>
 <asp:updatepanel runat="server">
 <ContentTemplate>
 <asp:button id="button1" runat="server" Text="clickme" onclick="function" />
 </ContentTemplate>
 </asp:updatepanel>
Run Code Online (Sandbox Code Playgroud)

如果更新面板内的控件执行回发,它将仅重新加载upate面板内部的页面部分.这里是你可能会发现从MSDN网站有用的链接.


Joe*_*orn 5

我认为这里对 ASP.Net 的工作方式存在一个根本性的误解。

当用户第一次请求您的页面时,将创建您的 Page 类的一个实例。ASP.Net 框架使用此页面实例贯穿页面生命周期以生成 html。然后将 html 响应发送到用户的浏览器。当浏览器收到响应时,它会为用户呈现页面。关键是:在渲染完成时,您的页面类实例可能已经被 .Net 垃圾收集器收集了。过去了,再也见不到了。

从现在开始,一切你的页面确实需要在服务器上运行,其中包括你的方法,是从浏览器全新的http请求的结果。用户点击按钮,一个新的http请求被发送到web服务器,整个页面生命周期再次运行,从头到尾,页面类的一个全新实例,一个全新的响应被发送到浏览器从头开始重新渲染。这就是 ASP.Net(以及几乎所有其他基于 Web 的技术)的核心工作方式。

幸运的是,您可以采取一些措施来解决这个问题。一种选择是将您当前的大部分 Page_Load 代码放入一个if (!IsPostBack) { }块中。另一种选择是使用[WebMethod]属性设置您的方法,并从按钮向该方法发出 ajax 请求。其他选项包括从自定义 javascript 和 ASP.Net UpdatePanel 控件调用 Web 服务。

什么最有效将取决于用户可能更改的页面上的其他内容。