日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用UrlRewrite时修改form的action属性问题

發布時間:2025/7/25 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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 都不用改。

轉載于:https://www.cnblogs.com/scgw/archive/2007/05/18/751094.html

總結

以上是生活随笔為你收集整理的使用UrlRewrite时修改form的action属性问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。