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


    http://blog.joycode.com/dotey/archive/2005/03/10/45572.aspx?Pending=true

    http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx

    综合以上讨论,首先建立/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
  • 相关阅读:
    代码大全2阅读笔记之最后总结
    web商品系统最终版
    web商品系统
    期末总结
    2020/12/13
    2020/12/12
    2020/12/11
    2020/12/10
    2020/12/09
    2020/12/08
  • 原文地址:https://www.cnblogs.com/asyuras/p/879801.html
Copyright © 2020-2023  润新知