私は次のような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
}
ただし、ボタンを押すたびにページ全体が更新されます。私はこのサイトを見て多くの解決策を見つけましたが、どれも私のプロジェクトでは実際には機能しません。推奨される解決策のいくつかを次に示します。
誰かがこれに対する解決策を持っていますか、それとも本当に不可能ですか?
コントロールを更新パネル内に配置します。そのためには、その上にスクリプトマネージャーも必要になるため、次のようになります。
<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がどのように機能するかについて根本的な誤解があると思います。
ユーザーが最初にページをリクエストすると、Pageクラスのインスタンスが作成されます。 ASP.Netフレームワークは、htmlを生成するために、このページインスタンスで ページライフサイクル を実行します。次に、html応答がユーザーのブラウザーに送信されます。ブラウザが応答を受信すると、ユーザーのページをレンダリングします。重要な点は次のとおりです。レンダリングが完了するまでに、ページクラスインスタンスはおそらくすでに.Netガベージコレクターによって収集されています。それはなくなって、二度と見られることはありません。
これ以降、メソッドを含め、サーバー上で実行する必要があるすべてのすべては、からのまったく新しいhttpリクエストの結果です。ブラウザ。ユーザーがボタンをクリックすると、新しいhttpリクエストがWebサーバーに投稿され、全体のページライフサイクルがページクラスの新しいインスタンスで再度実行されます。 、およびまったく新しい応答がブラウザに送信され、最初から再レンダリングされます。これが、ASP.Net(および他のほとんどすべてのWebベースのテクノロジ)がそのコアで機能する方法です。
幸い、これを回避するためにできることがいくつかあります。 1つのオプションは、現在のPage_Loadコードのほとんどをif (!IsPostBack) { }
ブロックに配置することです。もう1つのオプションは、 [WebMethod]
属性 を使用してメソッドを設定し、ボタンからメソッドにajaxリクエストを行うことです。その他のオプションには、カスタムjavascriptおよびASP.NetUpdatePanelコントロールからのWebサービスの呼び出しが含まれます。
何が最も効果的かは、ユーザーが変更した可能性のあるページ上の他のものによって異なります。
これは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