您的位置:首页 > 其它

url重写以后保持postback地址(转)

2010-11-20 09:12 357 查看
URLRewriter.dll用它伪静态以后,虽然URL变了.但是如果有一个服务器端的按钮,点击以后.在显示URL就变会成 ?id=XX 了,,怎么让他回调以后依然URL不变呢??

让所有页面继承一下类即可实现url重写以后保持postback地址。

using System;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Configuration;

namespace BLL
{
/// <summary>
/// PageBase 的摘要说明。
/// </summary>
public class PageBase : Page
{
private static object obj = new object();
//// <summary>
///  重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。www.SvnHost.cn
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}

base.Render(writer);
}
}

public class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
public FormFixerHtml32TextWriter(TextWriter writer)
: base(writer)
{
}

public override void WriteAttribute(string name, string value, bool encode)
{
// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL
if (string.Compare(name, "action", true) == 0)
{
value = HttpContext.Current.Request.RawUrl;
}
base.WriteAttribute(name, value, encode);
}
}

public class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
public FormFixerHtmlTextWriter(TextWriter writer)
: base(writer)
{
}

public override void WriteAttribute(string name, string value, bool encode)
{
if (string.Compare(name, "action", true) == 0)
{
value = HttpContext.Current.Request.RawUrl;
}

base.WriteAttribute(name, value, encode);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: