我有一个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
}
但是,每当我按下按钮时,整个页面都会刷新。我查看了这个网站并找到了很多解决方案,但它们都没有真正适用于我的项目。以下是一些建议的解决方案:
有没有人能解决这个问题,还是真的不可能?
答案 0 :(得分: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>
如果更新面板中的控件执行回发,它只会在upate面板内部重新加载页面的一部分。Here是您可能在MSDN站点中找到的有用链接。
答案 1 :(得分:4)
我认为ASP.Net的工作方式存在根本性的误解。
当用户首次请求您的页面时,会创建您的Page类的实例。 ASP.Net框架使用此页面实例运行page lifecycle以生成html。然后将html响应发送到用户的浏览器。当浏览器收到响应时,它会为用户呈现页面。关键是:当渲染完成时,你的页面类实例可能已经被.Net垃圾收集器收集了。它已经消失了,永远不会被再次看到。
从现在开始,所有您的页面需要在服务器上运行,包括您的方法,是来自浏览器的全新http请求的结果。用户单击该按钮,将新的http请求发布到Web服务器,整个页面生命周期再次在页面类的全新实例上运行,并向浏览器发送全新的响应从头开始重新渲染。这就是ASP.Net(以及几乎所有其他基于Web的技术)的核心工作方式。
幸运的是,你可以采取一些措施来解决这个问题。一种选择是将大多数当前的Page_Load代码放入if (!IsPostBack) { }
块中。另一个选项是使用[WebMethod]
attribute设置方法,并从按钮向方法发出ajax请求。其他选项包括从自定义javascript和ASP.Net UpdatePanel控件调用Web服务。
最有效的方法取决于用户可能已更改的页面上的其他内容。
答案 2 :(得分:1)
这是asp.net的正常行为,您实际上导致页面的postback
,以便在服务器上调用关联的事件。
我建议使用更新面板但如果您只需要在后端发生某些事情而不会在网页上造成任何重大更改,我会使用jquery和Web服务。我的主要原因是更新面板创建了巨大的视图状态对象。
在这里查看asp.net ajax:http://www.asp.net/ajax
这里有一个jquery和wcf:http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery
的例子