UrlReWriter 实现方法 续_解决FROM action 跳转问题

FormRewriterControlAdapter.cs
public   class  FormRewriterControlAdapter:System.Web.UI.Adapters.ControlAdapter
{
    
public  FormRewriterControlAdapter()
    {
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }

    
protected   override   void  Render(HtmlTextWriter writer)
    {
        
base .Render( new  RewriteFormHtmlTextWriter(writer));
    }
}

public   class  RewriteFormHtmlTextWriter:HtmlTextWriter
{
    
///   <summary>
    
///  调用基类的构造方法
    
///   </summary>
    
///   <param name="writer"></param>
     public  RewriteFormHtmlTextWriter(HtmlTextWriter writer): base (writer)
    {
        
this .InnerWriter  =  writer.InnerWriter;
    }

    
public  RewriteFormHtmlTextWriter(System.IO.TextWriter writer): base (writer)
    {
        
        
base .InnerWriter  =  writer;
    }

    
public   override   void  WriteAttribute( string  name,  string  value,  bool  fEncode)
    {
        
if  (name  ==   " action " )
        {
            HttpContext context 
=  HttpContext.Current;

            
if  (context.Items[ " ActionAlreadyWritten " ==   null )
            {
                value 
=  context.Request.RawUrl;

                context.Items[
" ActionAlreadyWritten " =   true ;
            }
        }
        
base .WriteAttribute(name, value, fEncode);
    }
}

然后在 App_Browsers 文件夹添加  BrowserFile.browser 浏览器文件
在里面添加以下一段代码
   < browser  refID ="Default" >
    
< controlAdapters >
      
< adapter  controlType ="System.Web.UI.HtmlControls.HtmlForm"
               adapterType
="FormRewriterControlAdapter"   />
    
</ controlAdapters >
  
</ browser >

这里利用新的 ASP.NET 2.0控件适配器扩展架构来定制控件的输出,用你提供的值来覆盖action属性的值
不需要自己重写页面代码

II原来的解决方法
namespace  ActionlessForm {
  
public   class  Form : System.Web.UI.HtmlControls.HtmlForm
  {
     
protected   override   void  RenderAttributes(HtmlTextWriter writer)
     {
        writer.WriteAttribute(
" name " this .Name);
        
base .Attributes.Remove( " name " );

        writer.WriteAttribute(
" method " this .Method);
        
base .Attributes.Remove( " method " );

        
this .Attributes.Render(writer);

        
base .Attributes.Remove( " action " );

        
if  ( base .ID  !=   null )
           writer.WriteAttribute(
" id " base .ClientID);
     }
  }
}
页面中的 Form 继承该Form 就可以实现相同的目的了
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值