0

私は大きな束縛に陥っています。

簡単に言えば、私は大きなプロジェクトに取り組んでおり、ASP.NET、C#、すべてを学んでいます。

私のプロジェクトの要素は、ユーザー コントロールで構成されています。私の考えでは、多くのユーザー コントロールを作成し、それぞれが作成中のプロジェクトの「コンポーネント」の機能を実行できるというものでした。これまで、クライアント側のスクリプトを使用して、各ユーザー コントロールのコード ビハインドへの ajax 呼び出しをポストバックしてきました。AJAX は、(クライアントから必要な) データをユーザー コントロールに渡すことができ、アクションを実行するために何かを返すことができるため、うまく機能しました。

ポストバックがコード ビハインド側に送信されたときに、どのメソッドがどのデータを処理する必要があるかを判断するために、クエリ文字列を生成するメソッドを使用してコールバック「アクション」を作成しました。

私の問題は、多くのユーザー コントロールを 1 ページで使い始める必要があることです。そのため、ANY コントロールがポストバックを実行するたびに、すべてのコントロールがページ ロードを通過します。私のコールバック ソリューションはこれを利用できると思っていましたが、そうではありません。特に、カスタム登録されたコントロールを別のユーザー コントロールにドロップすると。

私は多くの調査を行い、これを回避するためのさまざまな方法を見てきましたが、それらの最良の方法は[WebMethod]コントローラーです。ただし、私が取り組んでいるプロジェクトはNON-MVCです。

また、ページ全体へのポストバックを最小限に抑えるために UpdatePanel コントロールを使用しようとしていますが、ほとんど成功していません。

代替品として何を使用できますか? オプションが不足しているか、非常に基本的なものが欠けているように感じます。

TL;DR -- 複数のコントロールを区別できるユーザー コントロールにデータを渡すには、MVC 以外の方法が必要です。pagemethods (または page) は使用できません。手動の ajax 呼び出しがうまくいきません。完全なポストバックを行う余裕がない

4

2 に答える 2

1

を見てみましょう:

updatepanel と page メソッド

これに基づいて:

私の問題は、多くのユーザー コントロールを 1 つのページで使い始める必要があることです。そのため、ANY コントロールがポストバックを実行するたびに、すべてのコントロールがページ ロードを通過します。

これは簡単に聞こえるかもしれませんがif(!this.IsPostBack)、load イベントで使用しようとしましたか?

この状況を回避する唯一の方法は、PageMethodsを使用するか、スクリプト サービスを作成して AJAX 要求を処理することです ( ScriptService attribute or WCF REST services.

悪を使用した場合でもUpdatePanel、絶対にすべてのページ ライフ サイクルが実行されることに注意してください。つまり、ページ全体のビューステートを各投稿で送信するUpdatePanel必要があります。サーバー側のパフォーマンスはまったく変わりません。

したがって、 PageMethodsまたはScript Servicesを使用できます。ただし、落とし穴があります。それらを使い始めると、信じられないほどのパフォーマンスの変化に気付くでしょう。アプリケーションの応答性が向上します (RIA アプリケーション)。ただし、落とし穴は、ASP.Net サーバーの利点を利用できないことです。GridView、などのコントロールRepeater。つまり、ほとんどのビュー コントロールを変更する必要があります (これは、MVC アプリケーションで作業する場合に従うアプローチです)。

于 2012-07-17T23:37:39.927 に答える
0

aspx ページで静的メソッドを作成し、[WebMethod] でマークすることができます。次に、ユーザー コントロール マークアップから jQuery ajax を使用してメソッドを呼び出すことができます。このブログを見て

于 2012-07-17T21:55:45.643 に答える