0

URL 書き換えとポストバックで問題が発生しています。

編集:現在IIS 7とURL書き換えモジュールを使用しています。

基本的に、ポストバックの後、URL 書き換えが完全に台無しになり、重複した不要なフィールド値のペアがクエリ文字列に追加されました。コードで URL を解析していたことを考えると、Postback が発生した後、既に機能しているページが壊れてしまいました。

私の前に多くの人が同じ問題を抱えていたことから、ほとんどすべての人がPageLoadのForm Actionを変更して修正しました。

protected void Page_Load(object sender, EventArgs e)
    {
        form1.Action = Request.RawUrl;

        //Some other interesting things.
    }

重要:これでうまくいきました

ただし、私の開発経験は文字通り 1 か月にも満たないものですが、これまでのところ、問題に対するより洗練された解決策を探しています。より「グローバルな」レベルで同じ結果を得るために、 Global.asaxを編集することを含む、より良い代替手段があるかもしれないと示唆されました。

私の意見では、これにより、他のページが呼び出される前にトリックが実行されるため、全体的に効率が向上するはずです。

だから私の実際の質問は:

MasterPage 読み込みイベントでフォーム アクションを変更する代わりに、Global.asax ファイルを編集して同じことを達成するにはどうすればよいですか? さらにエレガントなソリューションがある場合は、それも含めていただければ幸いです。

これが私の最初の質問であることを考えると、私が十分に建設的であったことを願っています.

4

2 に答える 2

1

書き換え方法を変更できない場合は、あなたが持っているものよりも優れている可能性のある2つのアプローチを考えることができます.

1) 基本ページを作成し、その中のアクションを書き直します。すべてのページは、新しい基本ページから継承する必要があります。これにより、コードが 1 か所に保持され、すべてのページに書き込む必要がなくなります。

2) デフォルトのフォーム コントロールから継承し、アクション プロパティのレンダリングを完全に停止します。代わりに、書き換えられた URL にポストバックします。次に、すべてのフォーム インスタンスを新しいコントロールに置き換えます。この記事の半分ほど下にある意味がわかりますhttp://msdn.microsoft.com/library/ms972974

編集

3) Scott Gu がこの問題の解決策を投稿しました (この記事ではhttp://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx ) 。これははるかにクリーンで、コントロール アダプターを使用してコードを変更する必要はありません。

于 2012-05-09T14:32:40.647 に答える
0

iis にはもう 1 つの方法があります。

IIS URL リライタと説明

次のようにルート(マスターが存在する場合はマスターページプロパティで)を計算することをお勧めします:

Root = "http://" + Request.Url.Host + Request.ApplicationPath;
Root += (Root.EndsWith("/") ? "" : "/");

そして、このディレクティブを使用して .aspx に貼り付けます。

<%=Root %>
于 2012-05-09T14:02:52.953 に答える