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
  • 相关阅读:
    Android 音视频开发(六): MediaCodec API 详解
    Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
    Android 音视频开发(四):使用 Camera API 采集视频数据
    Android 音视频开发(三):使用 AudioTrack 播放PCM音频
    Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件
    Android 音视频开发(一) : 通过三种方式绘制图片
    Android 使用View绘制文字(DrawText)技术总结
    Mac OS 中安装 autoconf 和 automake
    Android 自定义 View 绘制
    关于 Socket 设置 setSoTimeout 误用的说明
  • 原文地址:https://www.cnblogs.com/asyuras/p/879801.html
Copyright © 2011-2022 走看看