如何让Url重写页面在PostBack后不改变当前URL

在Url重写的页面中进行PostBack并且不跳转的情况,会导致URL变回URL重写前的原始URL,这样的体验不太好,但是这种请况可以通过重写

protected override void Render(HtmlTextWriter writer)方法来修正这种问题。

考虑到Render方法中的HtmlTextWriter也有可能是来源于它的继承类Html32TextWriter,所以这里做了两个继承类分别处理这两种情况。

ContractedBlock.gif ExpandedBlockStart.gif FormFixerHtml32TextWriter
    public class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
    {
        
private string _url; 
        
public FormFixerHtml32TextWriter(TextWriter writer)
            : 
base(writer)
        {
            _url 
= HttpContext.Current.Request.RawUrl;
        }
        
public override void WriteAttribute(string name, string value, bool encode)
        {
            
if (_url != null && string.Compare(name, "action"true== 0)
            {
                value 
= _url;
            }
            
base.WriteAttribute(name, value, encode);
        }
    }

 

ContractedBlock.gif ExpandedBlockStart.gif FormFixerHtmlTextWriter
    public class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
    {
        
private string _url;
        
public FormFixerHtmlTextWriter(TextWriter writer)
            : 
base(writer)
        {
            _url 
= HttpContext.Current.Request.RawUrl;
        }
        
public override void WriteAttribute(string name, string value, bool encode)
        {
            
if (_url != null && string.Compare(name, "action"true== 0)
            {
                value 
= _url;
            }
            
base.WriteAttribute(name, value, encode);
        }
    }

 

随后创建一个助手方法(当然也可以用基页面的方式,通过继承实现)

ContractedBlock.gif ExpandedBlockStart.gif PageHelper
    public static class PageHelper
    {
        
public static HtmlTextWriter Render(HtmlTextWriter writer)
        {
            
if (writer is System.Web.UI.Html32TextWriter)
            {
                writer 
= new FormFixerHtml32TextWriter(writer.InnerWriter);
            }
            
else
            {
                writer 
= new FormFixerHtmlTextWriter(writer.InnerWriter);
            }
            
return writer;
        }
    }

 

在需要实现这种postback的页面中重写protected override void Render(HtmlTextWriter writer)方法,例如:

ContractedBlock.gif ExpandedBlockStart.gif Render
    protected override void Render(HtmlTextWriter writer)
    { 
        
base.Render(PageHelper.Render(writer));
    }

 

通过页面继承基类,在基类中统一处理这样的问题也是可以的。

转载于:https://www.cnblogs.com/BillChen/archive/2008/08/18/1270173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值