質問

このサイトでは、大量のデータベース生成ページを生成するために、URLの書き換えを行っています。すべてのページに、ユーザー用のログインコントロールがあります。このように:

内部aspxページ:/DB.aspx?id=123 ユーザーに表示されるURL:/ABC/123.aspx、/ABC/456.aspx ...(URLの書き換え)

残念ながら、各ページのタグには、" DB.aspx?id = 123"のアクション属性があります。ユーザーがボタンをクリックすると、ブラウザは/ABC/DB.aspx?id=123に投稿しますが、これはもちろん存在しません。

私が試した解決策: 1. HtmlFormをサブクラス化してアクション属性を変更します。これにより、サイト上の他のすべてのフォームが破壊されます。 2.アクション属性を削除します(ブラウザが常に同じURLに投稿するように)。これは、書き換えられたページで機能しますが、" /" (ルートディレクトリのdefault.aspx)" /"では動詞投稿が許可されていないというメッセージが表示されます。 (iis 6とiはマッピングを制御できません)

誰か?

役に立ちましたか?

解決

scott guのこの本当に素晴らしいブログ投稿 http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

"具体的には、新しいASP.NET 2.0コントロールアダプターの拡張性アーキテクチャを利用して、コントロールのレンダリングをカスタマイズし、その「アクション」をオーバーライドできます。属性値と指定した値。これにより、.aspxページのコードを変更する必要はありません

「URL書き換えによるASP.NET PostBacksの処理」セクションを確認し、彼が正常に投稿したアダプターを使用しました。

cookielessセッションを使用するときにurl rewriteを使用すると、asp.netにいくつかの問題があり、書き換えられたurlは元のページよりも深いことに注意してください。 (/ abc / apage vs. / db?)。問題はフレームワークのソースコードに直接あり、回避策がありますが、それは完全な主題です(トレードオフ:( ...同じレベルにしたいかもしれません)。

他のヒント

セマンティクスかもしれませんが、アクション属性=" DB.aspx?id = 123"または" /DB.aspx?id = 123&quot ;? URLの書き換えで物理ページへのパススルーが許可されていると仮定すると、これが問題になる可能性があります。

やったことはありませんが、Reflectorを使用してコードを見たので、次のように修正できると思います。

ページ上:

this.Form.Action = null;

または:

this.Form.SetAttribute("action", null);

それでもうまくいかない場合は、必要なパスを設定するだけです:

this.Form.SetAttribute(" action&quot ;," ABC / 123.aspx");

ASP.NET 3.5 SP1にアップグレードする場合、アクションプロパティは適切に認識され、分離コードから設定

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top