使用UrlRewrite时修改form的action属性问题
生活随笔
收集整理的這篇文章主要介紹了
使用UrlRewrite时修改form的action属性问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
.NET 2.0框架給ASP.NET增加了幾個特殊目錄,其中有一個最容易被忽視的App_Browsers目錄,這里是用來存放瀏覽器定義文件的,相關說明可以參考MSDN:http://msdn2.microsoft.com/zh-cn/library/ms228122(VS.80).aspx
在網站根目錄創建App_Browsers目錄,在里面建立一個新的文件起名 RewriteForm.browser ,其內容如下:
<browsers>
????<browser?refID="Default">
????????<controlAdapters>
????????????<adapter?controlType="System.Web.UI.HtmlControls.HtmlForm"
??? ??? ??? ??? adapterType="Kuang.HtmlFormAdapter"?/>
????????</controlAdapters>
????</browser>
</browsers>
其中,browser節的 refID="Default" 屬性是表示擴展系統原有的Default.browser文件(位于 %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers ),Default.browser 是全部瀏覽器定義的根,具體細節請參考MSDN說明。
Adapter的意思是適配器,在.NET領域表示在兩個對象之間進行協調的對象,例如ADO.NET中眾所周知的SqlDataAdapter類就是在SqlCommand和DataSet之間協調的Adapter。
ASP.NET 2.0帶來了ControlAdapter的概念,意思是位于RewriteForm.browser 文件中,通過 <adapter?controlType="System.Web.UI.HtmlControls.HtmlForm"?adapterType="Kuang.HtmlFormAdapter"?/> 這行,我指定了要重載HtmlForm類,并且提供了我自定義的ControlAdapter類的類型 Kuang.HtmlFormAdapter。
下面這個是自定義的ControlAdapter類的代碼:
using?System;
using?System.Web.UI.Adapters;
namespace Kuang {
????public?class?HtmlFormAdapter?:?ControlAdapter?{
????????protected?override?void?Render(System.Web.UI.HtmlTextWriter?writer)?{
????????????base.Render(new?FormRewriteTextWriter(writer));
????????}
????}
}
和重載Page類的手段一樣,這段代碼也引用了一個自定義的 HtmlTextWriter 類,以下是該類的實現代碼,我自己做了一定的修改:
using?System;
using?System.IO;
using?System.Web;
using?System.Web.UI;
namespace?Kuang?{
????public?class?FormRewriteTextWriter?:?HtmlTextWriter?{
????????public?FormRewriteTextWriter(TextWriter?writer)?:?base(writer)?{
????????????if(writer?is?HtmlTextWriter)
????????????????this.InnerWriter?=?(writer?as?HtmlTextWriter).InnerWriter;
????????????else
????????????????this.InnerWriter?=?writer;
????????}
????????public?override?void?WriteAttribute(string?name,?string?value,?bool?fEncode)?{
????????????HttpContext?context?=?HttpContext.Current;
????????????object?rewroteAlready?=?context.Items["FormActionRewroteAlready"];
????????????if(name?==?"action"?&&?rewroteAlready?==?null)?{
????????????????value?=?context.Request.RawUrl;
????????????????context.Items["FormActionRewroteAlready"]?=?new?object();
????????????}
????????????base.WriteAttribute(name,?value,?fEncode);
????????}
????}
}
把以上兩段代碼放入到網站的App_Code目錄下,就大功告成了,這個方法一個特別的優點是,不需要改動原來網站的任何代碼,連 web.config 都不用改。
在網站根目錄創建App_Browsers目錄,在里面建立一個新的文件起名 RewriteForm.browser ,其內容如下:
<browsers>
????<browser?refID="Default">
????????<controlAdapters>
????????????<adapter?controlType="System.Web.UI.HtmlControls.HtmlForm"
??? ??? ??? ??? adapterType="Kuang.HtmlFormAdapter"?/>
????????</controlAdapters>
????</browser>
</browsers>
其中,browser節的 refID="Default" 屬性是表示擴展系統原有的Default.browser文件(位于 %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers ),Default.browser 是全部瀏覽器定義的根,具體細節請參考MSDN說明。
Adapter的意思是適配器,在.NET領域表示在兩個對象之間進行協調的對象,例如ADO.NET中眾所周知的SqlDataAdapter類就是在SqlCommand和DataSet之間協調的Adapter。
ASP.NET 2.0帶來了ControlAdapter的概念,意思是位于RewriteForm.browser 文件中,通過 <adapter?controlType="System.Web.UI.HtmlControls.HtmlForm"?adapterType="Kuang.HtmlFormAdapter"?/> 這行,我指定了要重載HtmlForm類,并且提供了我自定義的ControlAdapter類的類型 Kuang.HtmlFormAdapter。
下面這個是自定義的ControlAdapter類的代碼:
using?System;
using?System.Web.UI.Adapters;
namespace Kuang {
????public?class?HtmlFormAdapter?:?ControlAdapter?{
????????protected?override?void?Render(System.Web.UI.HtmlTextWriter?writer)?{
????????????base.Render(new?FormRewriteTextWriter(writer));
????????}
????}
}
和重載Page類的手段一樣,這段代碼也引用了一個自定義的 HtmlTextWriter 類,以下是該類的實現代碼,我自己做了一定的修改:
using?System;
using?System.IO;
using?System.Web;
using?System.Web.UI;
namespace?Kuang?{
????public?class?FormRewriteTextWriter?:?HtmlTextWriter?{
????????public?FormRewriteTextWriter(TextWriter?writer)?:?base(writer)?{
????????????if(writer?is?HtmlTextWriter)
????????????????this.InnerWriter?=?(writer?as?HtmlTextWriter).InnerWriter;
????????????else
????????????????this.InnerWriter?=?writer;
????????}
????????public?override?void?WriteAttribute(string?name,?string?value,?bool?fEncode)?{
????????????HttpContext?context?=?HttpContext.Current;
????????????object?rewroteAlready?=?context.Items["FormActionRewroteAlready"];
????????????if(name?==?"action"?&&?rewroteAlready?==?null)?{
????????????????value?=?context.Request.RawUrl;
????????????????context.Items["FormActionRewroteAlready"]?=?new?object();
????????????}
????????????base.WriteAttribute(name,?value,?fEncode);
????????}
????}
}
把以上兩段代碼放入到網站的App_Code目錄下,就大功告成了,這個方法一個特別的優點是,不需要改動原來網站的任何代碼,連 web.config 都不用改。
轉載于:https://www.cnblogs.com/scgw/archive/2007/05/18/751094.html
總結
以上是生活随笔為你收集整理的使用UrlRewrite时修改form的action属性问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 与客家土楼的约会(增城-河源)
- 下一篇: 要成为一个成熟的软件工程师不容易啊