Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击按钮后禁用页面刷新ASP.NET_Asp.net_Button_Postback - Fatal编程技术网

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

单击按钮后禁用页面刷新ASP.NET,asp.net,button,postback,Asp.net,Button,Postback,我有一个asp按钮,如下所示: <asp:ScriptManager runat="server" ID="sm"> </asp:ScriptManager> <asp:updatepanel runat="server"> <ContentTemplate> <asp:button id="button1" runat="server" Text="clickme" onclick="function" /> </C

我有一个asp按钮,如下所示:

 <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>
Default.aspx

<asp:button id="button1" runat="server" Text="clickme" onclick="function" />
但是,每当我按下按钮时,整个页面都会刷新。我在这个网站上找到了很多解决方案,但没有一个真正适合我的项目。以下是一些建议的解决方案:

  • set onclick=“return false;”//那么如何在代码隐藏中运行该函数呢
  • 使用!IsPostBack位于页面_Load//中,但页面仍会完全刷新。我根本不想调用Page_Load
  • 禁用AutoEventWireup。//这是真是假没有区别

  • 有人对此有解决方案吗,还是真的不可能?

    我会将控件放在更新面板中。 为此,您还需要在其上方安装一个脚本管理器,如下所示:

     <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>
    

    是一个可以从MSDN站点找到的有用链接。

    这是asp.net的正常行为,您实际上是在导致页面的
    回发,以便在服务器上调用关联事件

    我建议使用更新面板,但是如果您只需要在后端发生一些事情,而不会对网页造成任何重大更改,我会使用jquery和web服务。对我来说,主要原因是更新面板创建了巨大的viewstate对象

    请在此处查看asp.net ajax:


    这里是jquery和wcf的一个例子:

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

    当用户首次请求页面时,将创建页面类的实例。为了生成html,ASP.Net框架使用此页面实例运行整个过程。然后将html响应发送到用户的浏览器。当浏览器收到响应时,它会为用户呈现页面。关键是:在渲染完成时,.Net垃圾收集器可能已经收集了页面类实例。它消失了,再也看不见了

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

    幸运的是,你可以做一些事情来解决这个问题。一个选项是将大多数当前页面加载代码放入
    if(!IsPostBack){}
    块中。另一个选项是使用设置方法,并从按钮向方法发出ajax请求。其他选项包括从自定义javascript和ASP.Net UpdatePanel控件调用web服务


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

    使用回调、ajax或更新面板实际上取决于您想要做什么。将AJAX视为一种解决方案。此外,您还可以使用一个使用AJAX的更新面板。谢谢您的回答。我使用了一个更新面板,它工作得非常好!对于其他像我这样的初学者来说,Dan Wahlin的这段视频真的很有帮助:。我们需要在ScriptManager上写些什么吗?或者可以像上面那样空白?