-1

大規模な MVC2 アプリケーションで、やや特殊な問題が発生しています。最初は、ロード中にリンクを含む部分ビューをロードする単一のメイン ビューがありました。プロジェクト設定ページで空の仮想パス設定を使用するローカル作業環境と、(複数アプリケーションの運用環境をより適切に反映するために) アプリケーション固有の仮想パスを持つステージング環境があります。すべてが両方でうまくいきました。最近、部分ビューのロードをページロードから非同期に切り替える理由がありました。他の変更は行われませんでした。リンクは引き続きローカルで機能しましたが、ステージングに移行したときに、アプリケーション固有のパス設定を追加することを怠ったため、リンクがすべて壊れました。かなり完全なアドレスを使用することに基づいて、回避策を見つけることができました。

より明確にするために (前の説明が少し不明確であることに気付いたので)、この特定のエラーは、次のすべてが当てはまる場合にのみ発生します。

  • リンクを含む部分ビューは、asych get 呼び出しと jquery.html()関数によって配置する必要があります。MVC によってページに直接読み込まれると、すべて正常に動作します。
  • 仮想パスが空以外に設定されたサーバー上にある必要があります。ここでの問題は、仮想パス設定から文字列を追加しないことから何らかの形で発生しています。実際、作成されたリンクへの適切な場所に仮想パスを手動で入力すると、正常に機能します。
  • 少なくとも部分ビューの呼び出しに関しては、.PartialView("partialViewName", dataObject)ではなくPartialView("~/Areas/appName/Views/controllerName/partialViewName.ascx", dataObject). 長い形式での交換は機能します。

確かに、長い名前を内側のリンクに置き換えて、多かれ少なかれすべてを機能させる方法を試行錯誤で見つけることができましたが、それはひどくクリーンな解決策ではありません。将来、どこかで同じことがまた起こるだろうし、もっと良い答えがそこにあるはずだと私は感じている. なんらかの理由で、呼び出し (元の非非同期バージョンではすべてがラップされている) が自動的に処理PartialView()する何らかのリンク マッサージに失敗しているようです。ベースと同じ仮想パスを適用するView()ように非同期的に呼び出されるように指示するために私ができることを誰かが知っていますか?partialView()View()

4

1 に答える 1

0

私は答えを発見しました。非同期処理された部分ビューの相対リンクは、それらを呼び出した によって使用されるリンクに基づいているようです.post()。また、少なくともいくつかのケースでは、MVC はそれらから進むリンクよりもポスト呼び出しをより寛容に管理しています。仮想パスを適切にカバーするように get 呼び出しアドレスを変更すると、問題が修正されます。

于 2012-07-24T14:32:31.023 に答える