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)
但是,每当我按下按钮,整个页面都会刷新.我查看了这个网站并找到了很多解决方案,但它们都没有真正适用于我的项目.以下是一些建议的解决方案:
有没有人有解决方案,或者它真的不可能?
我会将控件放在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网站有用的链接.
我认为这里对 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 服务。
什么最有效将取决于用户可能更改的页面上的其他内容。
归档时间: |
|
查看次数: |
41536 次 |
最近记录: |