欢迎访问 生活随笔!

生活随笔

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

编程问答

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

发布时间:2025/7/25 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用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属性问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。