zoukankan      html  css  js  c++  java
  • 如何在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
  • 相关阅读:
    ES6 语法
    使用过滤器进行跨域
    java读取资源文件(Properties)
    跨域
    java提取(获取)博客信息(内容)
    SSM命名规范框架
    学校管理系统设计java(数据库、源码、演讲内容、ppt等)
    学校管理系统C#(数据库、源码、演讲内容、ppt等)
    vue快速使用
    故障排除:无法启动、访问或连接到 Azure 虚拟机上运行的应用程序
  • 原文地址:https://www.cnblogs.com/asyuras/p/879801.html
Copyright © 2011-2022 走看看