C# 自定义窗体控件适配器未启动

C# 自定义窗体控件适配器未启动,c#,asp.net,control-adapter,C#,Asp.net,Control Adapter,我有一个网站,它有一个定制的控件适配器,用于重写表单上的操作。(这是我们从另一个机构继承的站点)在本地主机上以调试模式运行时,一切都很好。但是,一旦我将站点发布到QA环境中的服务器上,定制适配器就会停止启动 我已经发布了调试符号并附加到w3wp进程。单步执行页面加载过程,自定义控件适配器中设置的断点永远不会被命中。当您在本地主机上的调试中运行时,它们会在每次页面加载时触发。生产代码在同一台服务器上运行,生产中的自定义控件适配器正在工作。但是,我们需要对生产进行更新,我们担心我们会破坏生产现场 有

我有一个网站,它有一个定制的控件适配器,用于重写表单上的操作。(这是我们从另一个机构继承的站点)在本地主机上以调试模式运行时,一切都很好。但是,一旦我将站点发布到QA环境中的服务器上,定制适配器就会停止启动

我已经发布了调试符号并附加到w3wp进程。单步执行页面加载过程,自定义控件适配器中设置的断点永远不会被命中。当您在本地主机上的调试中运行时,它们会在每次页面加载时触发。生产代码在同一台服务器上运行,生产中的自定义控件适配器正在工作。但是,我们需要对生产进行更新,我们担心我们会破坏生产现场

有人知道为什么自定义控件适配器不会在服务器上启动吗?我以前从未使用过自定义适配器,除了将适配器放入App_Code文件夹和App_browser文件夹中的.browser文件中的条目之外,是否还需要执行其他操作

应用程序代码文件夹中的适配器代码:

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter {

    protected override void Render(System.Web.UI.HtmlTextWriter writer) {
        base.Render(new RewriteFormHtmlTextWriter(writer));
    }

}

public class RewriteFormHtmlTextWriter : HtmlTextWriter {
    public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
        : base(writer) {
        InnerWriter = writer.InnerWriter;
    }
    public RewriteFormHtmlTextWriter(TextWriter writer)
        : base(writer) {
        InnerWriter = writer;
    }

    public override void WriteAttribute(string name, string value, bool fEncode) {
        // if the attribute we are writing is the "action" attribute, and we are not on a sub-control, 
        // then replace the value to write with the raw URL of the request - which ensures that we//ll
        // preserve the PathInfo value on postback scenarios

        if (name == "action") {
            HttpContext Context = HttpContext.Current;

            if (Context.Items["ActionAlreadyWritten"] == null) {
                // Because we are using the UrlRewriting.net HttpModule, we will use the 
                // Request.RawUrl property within ASP.NET to retrieve the origional URL
                // before it was re-written.  You//ll want to change the line of code below
                // if you use a different URL rewriting implementation.

                value = Context.Request.RawUrl;

                // Indicate that we//ve already rewritten the <form>//s action attribute to prevent
                // us from rewriting a sub-control under the <form> control

                Context.Items["ActionAlreadyWritten"] = true;
            }
        }

        base.WriteAttribute(name, value, fEncode);
    }
}
<browsers>

  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
      <!--<adapter controlType="System.Web.UI.HtmlControls.HtmlLink" adapterType="LinkRewriterControlAdapter" />-->
    </controlAdapters>
  </browser>

</browsers>
public class FormRewriterControlAdapter:System.Web.UI.Adapters.ControlAdapter{
受保护的覆盖无效渲染(System.Web.UI.HtmlTextWriter编写器){
base.Render(新的RewriteFormHtmlTextWriter(writer));
}
}
公共类RewriteFormHtmlTextWriter:HtmlTextWriter{
公共重写表单HtmlTextWriter(HtmlTextWriter)
:base(writer){
InnerWriter=writer.InnerWriter;
}
公共重写表单HtmlTextWriter(TextWriter)
:base(writer){
InnerWriter=编写器;
}
公共重写void WriteAttribute(字符串名称、字符串值、布尔代码){
//如果我们正在编写的属性是“action”属性,并且我们不在子控件上,
//然后将要写入的值替换为请求的原始URL,这确保了
//在回发方案中保留PathInfo值
如果(名称=“操作”){
HttpContext=HttpContext.Current;
if(Context.Items[“ActionalReadyWrited”]==null){
//因为我们使用的是UrlRewriting.net HttpModule,所以我们将使用
//ASP.NET中的Request.RawUrl属性检索原始URL
//在重新编写之前。您需要更改下面的代码行
//如果使用不同的URL重写实现。
value=Context.Request.RawUrl;
//表示我们已重写了//s action属性以防止
//阻止我们重写控件下的子控件
Context.Items[“ActionalReadyWrited”]=true;
}
}
base.WriteAttribute(名称、值、代码);
}
}
和应用程序浏览器文件夹中的my.browser文件:

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter {

    protected override void Render(System.Web.UI.HtmlTextWriter writer) {
        base.Render(new RewriteFormHtmlTextWriter(writer));
    }

}

public class RewriteFormHtmlTextWriter : HtmlTextWriter {
    public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
        : base(writer) {
        InnerWriter = writer.InnerWriter;
    }
    public RewriteFormHtmlTextWriter(TextWriter writer)
        : base(writer) {
        InnerWriter = writer;
    }

    public override void WriteAttribute(string name, string value, bool fEncode) {
        // if the attribute we are writing is the "action" attribute, and we are not on a sub-control, 
        // then replace the value to write with the raw URL of the request - which ensures that we//ll
        // preserve the PathInfo value on postback scenarios

        if (name == "action") {
            HttpContext Context = HttpContext.Current;

            if (Context.Items["ActionAlreadyWritten"] == null) {
                // Because we are using the UrlRewriting.net HttpModule, we will use the 
                // Request.RawUrl property within ASP.NET to retrieve the origional URL
                // before it was re-written.  You//ll want to change the line of code below
                // if you use a different URL rewriting implementation.

                value = Context.Request.RawUrl;

                // Indicate that we//ve already rewritten the <form>//s action attribute to prevent
                // us from rewriting a sub-control under the <form> control

                Context.Items["ActionAlreadyWritten"] = true;
            }
        }

        base.WriteAttribute(name, value, fEncode);
    }
}
<browsers>

  <browser refID="Default">
    <controlAdapters>
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
      <!--<adapter controlType="System.Web.UI.HtmlControls.HtmlLink" adapterType="LinkRewriterControlAdapter" />-->
    </controlAdapters>
  </browser>

</browsers>