2012-05-09 1 views
0

URL書き換えとポストバックに関する問題が発生しています。Global.asaxを使用したURL書き換えおよびポストバックに対する代替アプローチ

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

ポストバック後、私のURL書き換えは完全に混乱し、重複した不要なフィールド値のペアをクエリ文字列に追加しました。私のコードでURLを解析していたことを考えれば、これはポストバックが発生した後、すでに動作しているページを破った。私は私の前に多くの人々が見たものから、

は同じ問題を持っていたし、ほとんどすべてのそれらのはそうのように、PageLoad上フォームアクションを変更すると、それを固定しています

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

     //Some other interesting things. 
    } 

重要:このトリックをした、それは作品。

私の開発経験は文字通り1ヵ月未満ですが、私は今までより優れた解決策を探しています。私はより良い "グローバル"レベルで同じ結果を得るためにGlobal.asaxを編集するより良い選択肢があるかもしれないと示唆しました。

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

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

どのように私は、Global.asaxファイルを編集する代わりに、私のマスターページロードイベントにフォームのアクションを変更することによって、同じことを達成することができますか?より洗練されたソリューションがあれば、それも含めていただければ幸いです。

これが私の最初の質問であると考えて、私は十分建設的であったと思います。

+2

使用している.NETのバージョンは何ですか? 3.5以降では、より高度なMVCのルーティングエンジンを使用することができます。http://msdn.microsoft.com/en-us/magazine/dd347546.aspx –

+0

+1ルーティング。あなたがあなたのURLについて気にしているのであれば、それらを解析してからやっているように見えますが、ルーティングが必要です。 – bzlm

+0

現在、IIS 7とURL書き換えを使用しています。私が理解したところからルーティングは、特に初心者のためにはもちろん、簡単ではないコンセプトではありません。これまでのところ私の単純なURLの書き換えは完璧に動作しており、一度に一つのことを学びたいと思っています。私はちょうどポストバック修正プログラムを別の方法で実装したかったのです。 – Peter

答えて

2

私はあなたが持っているものより良いかもしれない2つのアプローチを考えることができます。

1)ベースページを作成してアクションを書き直す - すべてのページは新しいベースページから継承する必要があります。これはコードを1つの場所に保持し、すべてのページに書き込む必要はありません。

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

編集スコット区は非常にクリーンであり、任意の変更は含まれませんこの記事http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx)でこの問題に対する解決策を(掲載

3)

コントロールアダプターを使用してください。

+0

Scott Guの記事は素晴らしいです!私は彼の方法や何かを考えの流れで試してみるよ - ありがとう。 1の時点では、これはマスターページの機能であり、実際には効率化されません。 2の時点で、これは巧妙な解決策ですが、私が本当に新しいと考えても、フォームをカスタムのものに完全に置き換えるなどの内部的なものを混乱させたくありません。やって – Peter

0

IISによるもう一つの方法があります:

IIS URL Rewriter and explained

(マスターが存在する場合は、マスターページプロパティで)私はルートを計算するためにあなたをアドバイスのように:

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

して貼り付けよりこの指令を使用している.aspxの場合:

<%=Root %> 
+0

私のURLはすでに書き換えられています。これは実際にはIISで行われますが、ポストバック後の返されたURLは大問題です。 – Peter

+0

RegExを確認してください... – levi

+0

私の編集した回答を確認してください – levi

関連する問題