在URL重写后,form标记中的Action值也用虚拟地址

by 陈少俊 2009.12.11 22:07

首先建立/App_Browsers/Form.broswer文件,其内容为:

<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
                        adapterType="FormRewriterControlAdapter" />
        </controlAdapters>
    </browser>

</browsers>
再建立FormRewriterControlAdapter类:

    public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter
    {
        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);
        }
    }

    #region FormFixerHtml32TextWriter
    internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
    {
        private string _url; // 假的URL

        internal FormFixerHtml32TextWriter(TextWriter writer)
            : base(writer)
        {
            _url = HttpContext.Current.Request.RawUrl;
        }

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

    #region FormFixerHtmlTextWriter
    internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
    {
        private string _url;
        internal 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);
        }
    }
    #endregion

博客评论由 Disqus 驱动

关于博主

博主——陈少俊

   曾经的我们并不相识,但是网络让我们联系了起来,人生本来就是这样,有许多的必然和偶然,我不能做太多,只 是分享我自己拥有的,看到的,听到的。我致力于网站开发,系统建设,推广自己,谢谢大家的关心和爱护。
现就职于汽车时尚传媒有限公司网络部,中国汽车时尚网:http://www.86che.com/
汽车时尚网分类说明:汽车时尚网分类中所有新闻来源于中国汽车时尚网
汽车时尚报分类说明:汽车时尚报分类中所有新闻均为汽车时尚报出刊报纸中所有内容。
汽车时尚报电子版从《汽车时尚报》第493期开始正式免费上线,具体新闻内容请查阅【汽车时尚报】分类。
联系电话:13551107754,(028)68116678
MSN:chen1989jun@hotmail.com

日历中查看

<<  February 2012  >>
MonTueWedThuFriSatSun
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

切换到大日历中浏览

按月阅读

最近的评论

评论 RSS

声明

本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009-2010  All Rights Piao Blog
蜀ICP备09038546号

部件 Statistics 未找到.

There is an error in XML document (0, 0).X