URL書き換えとは、URLアドレスを書き換えることです(汗^_^)。
詳細: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
利点: URL の短縮など
使用法: 1. ms の URLRewrite.dll をダウンロードして、ゴミ箱に入れます
2 web.config で次の設定を行います:
<?xml version="1.0"coding="utf-8" ?>
<configuration>
<configSections>
<セクション名="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler、URLRewriter" />
</configSections>
<RewriterConfig>
<ルール>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<addverb="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
次に、cs に次のように記述します:
private void Page_Load(object sender, System.EventArgs e)
{
//ここにユーザーコードを入力してページを初期化します
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("はは");
」
と入力するだけです
(注: 先頭は d で、その後に数字が続く必要があります)
実際、この d123.aspx は仮想的なもので、実際には存在しません。フォーマットに適合する限り。
http://localhost/overred/default.aspxにジャンプし
、d の後の数字 (最後は数字でなければなりません) などのデフォルトのパラメーターをキャプチャして、ID を表示できるようにします。 123条として。
書き換えられた URL でポストバックが生成された場合、ポストバックは d123.aspx に渡されるため、ユーザーがボタンをクリックすると実際のアドレスが表示されます。ただし、ユーザーの観点から見ると、ユーザーがボタンをクリックすると、ポストバックが表示される可能性があります。突然の URL 変更に混乱することがあります。
ms さんはお客様を神と考えていることがわかります。 (本当ですか? #¥%…—*)
ms の引用を続けると、
Web フォームがレンダリングされるときに、アクション プロパティが Request オブジェクト内のファイル パスの値に直接設定されるために発生します。もちろん、Web フォームがレンダリングされると、URL は /Products/Beverages.aspx から ListProductsByCategory.aspx?CategoryID=1 に書き換えられ、ユーザーが ListProductsByCategory.aspx?CategoryID=1 にアクセスしたいと Request オブジェクトが報告していることを示します。 。サーバー側のフォームでアクションのプロパティをレンダリングしないようにするだけで、この問題は解決します。 (デフォルトでは、フォームにアクション プロパティが含まれていない場合、ブラウザーはポストバックします。)
残念ながら、Web フォームではアクション プロパティを明示的に指定することも、特定のプロパティを設定してアクション プロパティのレンダリングを無効にすることもできません。 。したがって、System.Web.HtmlControls.HtmlForm クラスを独自に拡張し、RenderAttribute() メソッドをオーバーライドして、アクション属性をレンダリングしないことを明示的に示す必要があります。
継承機能のおかげで、数行のコードを追加するだけで、HtmlForm クラスのすべての機能を取得し、必要な動作を得ることができます。以下に、カスタム クラスの完全なコードを示します
。
パブリック クラス フォーム : System.Web.UI.HtmlControls.HtmlForm
{
protected オーバーライド void RenderAttributes(HtmlTextWriter ライター)
{
Writer.WriteAttribute("名前", this.Name);
Base.Attributes.Remove("名前");
Writer.WriteAttribute("メソッド", this.Method);
Base.Attributes.Remove("メソッド");
this.Attributes.Render(ライター);
Base.Attributes.Remove("アクション")
;
Writer.WriteAttribute("id", Base.ClientID);
}
}
、
HtmlForm クラスの RenderAttributes() メソッドの正確なコードのみが含まれており、アクション属性は設定されません。 (HtmlForm クラスのソース コードを表示するために Lutz Roeder の Reflector を使用しました。)
このクラスを作成してコンパイルした後、ASP.NET Web アプリケーションで使用するには、まず Web アプリケーションの Clamped ファイルに追加する必要があります。 。次に、これを HtmlForm クラスの代わりに使用するには、ASP.NET Web ページの先頭に次の行を追加するだけです:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
次に、<form runat="server"> (存在する場合) を次のように置き換えます:
<skm:Form id="Form1" Method="post" runat="server"> の
右側にある < Replace /form> タグと
</skm:Form>
上記はフォームを継承する方法です。実際には、ページを継承するもっと簡単な方法があるため、aspx ページ内で何も変更する必要はありません。 。
コード:
システムを使用する;
System.IO を使用します。
System.Web を使用します。
System.Web.UI
名前空間 URl を
使用します。
{
/**//// <概要>
/// ページ基本クラスwww.downcodes.com
/// </概要>
パブリック クラス OLPage : ページ
{
パブリック OLPage()
{
}
/**//// <概要>
/// デフォルトの HtmlTextWriter メソッドをオーバーライドし、その値が実際の URL ではなく書き換えられた URL になるように、form タグの value 属性を変更します。
/// </概要>
/// <param name="writer"></param>
protected オーバーライド void Render(HtmlTextWriter ライター)
{
if (ライターは System.Web.UI.Html32TextWriter)
{
Writer = 新しい FormFixerHtml32TextWriter(writer.InnerWriter);
}
それ以外
{
Writer = 新しい FormFixerHtmlTextWriter(writer.InnerWriter);
Base.Render
(ライター);
}
}
内部クラス FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private string _url; // 偽の URL
内部 FormFixerHtml32TextWriter(TextWriter ライター):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
public override void WriteAttribute(文字列名、文字列値、ブールエンコード
)
{
// 現在出力されている属性が form タグの action 属性の場合、その値を書き換えた偽の URL に置き換えます
if (_url != null && string.Compare(name, "action", true) == 0)
{
値 = _url;
}
Base.WriteAttribute(名前、値、エンコード);
}
}
内部クラス FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
プライベート文字列 _url;
内部 FormFixerHtmlTextWriter(TextWriter ライター):base(ライター)
{
_url = HttpContext.Current.Request.RawUrl;
public override void WriteAttribute(文字列名、文字列値、ブールエンコード
)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
値 = _url;
Base.WriteAttribute
(名前、値、エンコード);
}
}
}
これを DLL にカプセル化し、参照を追加するだけで後で取得できます。
わかりました、とても簡単です!