点击ASP.NET按钮后,禁止刷新页面。

问题描述 投票:5回答:3

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

Default.aspx

<asp:button id="button1" runat="server" Text="clickme" onclick="function" />

Default.aspx.cs

protected void function(object sender EventArgs e)
{
    // Do some calculation
}

但是,每当我按下按钮时,整个页面都会被刷新。我在这个网站上找到了很多解决方案,但没有一个真正适合我的项目。以下是一些建议的解决方案。

  1. set onclick="return false;" 但我如何在代码后面运行这个函数?
  2. 在Page_Load中使用 !"IsPostBack"/但页面还是会完全刷新。我不希望Page_Load被调用。
  3. 禁用AutoEventWireup。/使这个true或false没有区别。

有谁有办法解决这个问题,还是真的不可能?

asp.net button postback
3个回答
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>

如果更新面板内的控件进行了回传,它将只重载update面板内的那部分页面。下面是 是MSDN网站上的一个链接,你可能会觉得有用。


5
投票

我认为这里对ASP.Net的工作原理有一个基本的误解。

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

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

幸运的是,你可以做一些事情来解决这个问题。其中一个办法是把当前大部分的Page_Load代码放到一个叫 "Page_Load "的程序中。if (!IsPostBack) { } 块。另一个选择是在你的方法中使用 [WebMethod] 属性 并从按钮向该方法发出ajax请求。其他选项包括从自定义javascript和ASP.Net UpdatePanel控件中调用web服务。

什么是最有效的将取决于用户可能已经改变的页面上的其他东西。


1
投票

这是asp.net的正常行为,你实际上是造成了一个 postback 的页面,以便在服务器上调用相关事件。

我建议使用更新面板 不过 如果你只是需要在后台发生一些事情,而不需要在网页上引起任何重大的变化,我会使用jquery和一个web服务。对我来说,主要原因是更新面板会创建巨大的视图状态对象。

看一下这里的asp.net ajax。http:/www.asp.netajax

而这里的例子是jquery和wcf。http:/www.codeproject.comArticles132809Calling-WCF-Services-using-jQuery

© www.soinside.com 2019 - 2024. All rights reserved.