web-dev-qa-db-ja.com

ボタンをクリックした後のページの更新を無効にするASP.NET

私は次のような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. onclick = "returnfalse;"を設定します//しかし、コードビハインドで関数を実行するにはどうすればよいですか?
  2. page_Load //で!IsPostBackを使用しますが、ページは完全に更新されます。 Page_Loadをまったく呼び出さないでください。
  3. AutoEventWireupを無効にします。 //これをtrueまたはfalseにしても、違いはありません。

誰かがこれに対する解決策を持っていますか、それとも本当に不可能ですか?

4
user3685285

コントロールを更新パネル内に配置します。そのためには、その上にスクリプトマネージャーも必要になるため、次のようになります。

 <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サイトから役立つリンクです。

8
psoshmo

ここでは、ASP.Netがどのように機能するかについて根本的な誤解があると思います。

ユーザーが最初にページをリクエストすると、Pageクラスのインスタンスが作成されます。 ASP.Netフレームワークは、htmlを生成するために、このページインスタンスで ページライフサイクル を実行します。次に、html応答がユーザーのブラウザーに送信されます。ブラウザが応答を受信すると、ユーザーのページをレンダリングします。重要な点は次のとおりです。レンダリングが完了するまでに、ページクラスインスタンスはおそらくすでに.Netガベージコレクターによって収集されています。それはなくなって、二度と見られることはありません。

これ以降、メソッドを含め、サーバー上で実行する必要があるすべてのすべては、からのまったく新しいhttpリクエストの結果です。ブラウザ。ユーザーがボタンをクリックすると、新しいhttpリクエストがWebサーバーに投稿され、全体のページライフサイクルがページクラスの新しいインスタンスで再度実行されます。 、およびまったく新しい応答がブラウザに送信され、最初から再レンダリングされます。これが、ASP.Net(および他のほとんどすべてのWebベースのテクノロジ)がそのコアで機能する方法です。

幸い、これを回避するためにできることがいくつかあります。 1つのオプションは、現在のPage_Loadコードのほとんどをif (!IsPostBack) { }ブロックに配置することです。もう1つのオプションは、 [WebMethod]属性 を使用してメソッドを設定し、ボタンからメソッドにajaxリクエストを行うことです。その他のオプションには、カスタムjavascriptおよびASP.NetUpdatePanelコントロールからのWebサービスの呼び出しが含まれます。

何が最も効果的かは、ユーザーが変更した可能性のあるページ上の他のものによって異なります。

4
Joel Coehoorn

これはasp.netの通常の動作です。実際には、サーバーで関連するイベントが呼び出されるように、ページのpostbackが発生しています。

更新パネルを使用することをお勧めしますが、Webページに大きな変更を加えることなく、バックエンドで何かを実行する必要がある場合は、 jqueryとWebサービス。私の主な理由は、更新パネルが巨大なビューステートオブジェクトを作成することです。

ここでasp.netajaxを見てください: http://www.asp.net/ajax

そしてここにjqueryとwcfの例があります: http://www.codeproject.com/Articles/132809/Calling-WCF-Services-using-jQuery

1
Ted