我们可以通过自定义页面基类,重写默认的HtmlTextWriter方法,重写属性输出WriteAttribute(string name, string value, bool encode)方法,当输出action时,将action属性的值强制转换为当前虚URL(HttpContext.Current.Request.RawUrl,上面的1000.aspx)

最后就是让所有的页面都调用这个基类,修改一下Web.config就好了
<!-- Openlab.Controls.OLPage为页面基类,Openlab.Controls为基类所在dll -->
<pages pageBaseType="Openlab.Controls.OLPage, Openlab.Controls"/>

附页面基类完整代码(参考CS代码完成):

[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?using System; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?using System.IO; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?using System.Web; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?using System.Web.UI; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?namespace Openlab.Controls { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?/// 页面基类 [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?/// </summary> [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? public class OLPage : Page { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?public OLPage() { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?/// 重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。 [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?/// </summary> [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?/// <param name="writer"></param> [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? protected override void Render(HtmlTextWriter writer) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?if (writer is System.Web.UI.Html32TextWriter) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? writer = new FormFixerHtml32TextWriter(writer.InnerWriter); [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?else { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? writer = new FormFixerHtmlTextWriter(writer.InnerWriter); [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?base.Render(writer); [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?#endregion [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?private string _url; // 假的URL [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?internal FormFixerHtml32TextWriter(TextWriter writer):base(writer) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? _url = HttpContext.Current.Request.RawUrl; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?public override void WriteAttribute(string name, string value, bool encode) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? if (_url != null && string.Compare(name, "action", true) == 0) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? value = _url; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?base.WriteAttribute(name, value, encode); [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?#endregion [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?private string _url; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?internal FormFixerHtmlTextWriter(TextWriter writer):base(writer) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? _url = HttpContext.Current.Request.RawUrl; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?public override void WriteAttribute(string name, string value, bool encode) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?if (_url != null && string.Compare(name, "action", true) == 0) { [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? value = _url; [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?base.WriteAttribute(name, value, encode); [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址? } [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?#endregion [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?[URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?#endregion [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?} [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?

相关文章: