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

本文介绍了一种使用ASP.NET2.0的控件适配器扩展架构来自定义HtmlForm控件输出的方法,通过创建FormRewriterControlAdapter类并重写Render方法,可以修改form标签的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 就可以实现相同的目的了

转载于:https://www.cnblogs.com/yssoft/articles/1488209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值