1

わかった、

そこで、この Web アプリケーションを作成しました。この Web アプリケーションは、単一ページのアプリケーションになるように設計されています。さまざまなユーザー コントロール (フォームとして設計) の 1 つを 1 つの更新パネル (コントロールのクリア、新しいコントロールの読み込みなど) に読み込むメニューがあります。ユーザーは、入力、クリック、保存、削除などを行います。これらのユーザー コントロール内には、いくつかのデータバインドされた内部依存コントロールがあります。これが、それらを更新パネルにロードする主な理由です。

ここで、ユーザーが新しいメニューを選択してから、データバインドされたコントロールの値を変更しようとすると、最初のポストバックでのみコントロールの値が失われるというこの問題が発生しました。これは、通常のパネルをクリアしてロードしようとしたため、ユーザーコントロールが存在するコンテナーをクリアしたことが原因であると確信しており、まったく同じ問題が発生します。私の場合は (!IsPostBack) を使用しても機能しないため、データバインディングに関して、ページとユーザーコントロールの間で同じロジックを実行するブールセッション変数を作成しました。私の問題をさらにテストするために、アプリケーションをマルチページ アプリに変更すると、問題はなくなりました。値はポストバック時に保持されます。

つまり、元のポイントに到達するには、複数のページを使用することで機能を確認します。シングル ページ バージョン内で、「Server.Transfer(thedefaultpage.aspx)」をコードに追加するだけで、ユーザーを同じページに維持しながら、マルチページ アプローチから得た機能を保持できると考えました。それはうまくいきます。データの損失はありません。正常に動作します。これは後味が悪いのでしょうか?ユーザーのすべての機能と義務は常に 1 つのページで実行され、ナビゲーションは何もしません。

基本的にページを更新することは悪い習慣またはハックであることを心配していますが、アプリケーションの目的のために機能し、不要な場合に 2 ~ 3 ダースのページを作成する必要がなくなります。結果をクリアするためだけに誰かがこれを行う、またはマイナーなことをするスレッドをいくつか読みましたが、それだけです。

これが悪い習慣である場合 (またはそうでない場合でも)、最初のポストバック値の損失に対する解決策を誰かが持っているでしょうか? データバインドされたマスター、ページ、ユーザーコントロール、および子コントロールで enableviewstate=true および viewstatemode=enabled を使用しています。ご意見をお寄せいただきありがとうございます。

4

3 に答える 3

0

はい、それは悪い習慣です。WebForms には、UI の複雑さが増すにつれて着実に悪化する状態の問題があります。

XML にシリアル化され、プレーン テキストとしてデータベースに保存される単一のクラスを使用して、SPA UI の状態を保持します。URL で GUID をセッション キーとして使用します (ただし、ユーザー ID や ASP.NET セッション ID などを使用できます)。これにより、すべての要求でこの状態情報を取得できます。ユーザーがページを更新します。

これを行うと、Web レイヤーの詳細に巻き込まれることなく、単体テストで論理 UI をカバーできるという追加の利点があり、複雑なワークフローに適しています。

ただし、これを試す場合は、MVC への移行を検討し、単純な古い Post-and-Redirect を使用することをお勧めします。戻るボタンを許可する場合は、リダイレクト レスポンスにハッシュ タグを追加します。

于 2013-11-30T18:26:08.717 に答える