2

2013 年 7 月の CodePlex の AjaxControlToolkit リリースでは、コントロール バンドルが導入されました。

アプリケーションで使用するコントロールを定義できます。これにより、js パッケージが削減され、アプリケーションの速度が向上します。

しかし、私はこのリリースに問題があります:

私のASP.NET Webサイトには、から継承されたカスタムコントロールがありますAjaxControlToolkit.HTMLEditor.Editor

public class MyHtmlEditor : AjaxControlToolkit.HTMLEditor.Editor, IMyInterface
{
    protected override void FillTopToolbar()
    {
        // my custom code
    }

    protected override void FillBottomToolbar()
    {
        // my custom code
    }
}

今日まで、コントロールは完全に機能しています。

最新リリースに更新した後、コントロールが機能しなくなり、例外が発生します。

これはスタックです:

[Exception: Could not load control MyWebSite.MyHtmlEditor.
The script reference(s) of this control was not loaded correctly.
If AjaxControlToolkit.config is used, probably this control is not registered properly.]

AjaxControlToolkit.ToolkitScriptManager.OnPreRender(EventArgs e) +722
System.Web.UI.Control.PreRenderRecursiveInternal() +113
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4297

この新機能は必要ありません。なぜそれを有効にする明示的な方法がないのかわかりません (デフォルトでは無効になっています)。

誰かがこれについて私の知識をもっと持っていますか?

古いリリースに行かずに、この新しい機能を無効にする必要があります..

すべての助けに感謝します

編集

クライアント スクリプトの結合は、ファイルAjaxControlToolkit.configが存在する場合にのみ機能します。

それ以外の場合は、すべてのスクリプトが読み込まれます (既定のシナリオ)。

構成のいくつかのテストの後、同じエラーがスローされます...

4

1 に答える 1

2

AjaxControlToolkit の 2013 年 7 月リリースのコードベースには、コントロールがコントロール バンドルから解決される方法に「問題」があります。

Codeplex からアップグレードした後、私のプロジェクトで発生したのと同じ問題が発生しました。これが私の問題であり、文脈です。

  • AjaxControlToolkit のリソースとスクリプトを使用および継承するカスタム コントロールが多数あります
  • カスタム コントロールは 2 番目のアセンブリにあります
  • それぞれに ClientScriptResource と 3 番目のカスタム コントロールへの依存関係があります。

そのため、アップグレード後、カスタム コントロールを登録するためにAjaxControlToolkit.configを作成し、何時間ものデバッグと苦労が始まりました。コンテキストについてこれ以上説明しないと、次の手順になります。

  1. 上記の質問編集で述べたように、 AjaxControlToolkit.configを作成します。
  2. 名前付きのコントロール バンドルを作成するかどうかはわかります
  3. カスタム コントロールの場合、コントロール アセンブリとコントロール名を指定することは明らかです。<control name="mynamespace.ModalPopupExtender" assembly="myassembly"></control>
  4. TooliktScriptManagerこれを挿入して、バンドルのあるページを参照してください<ControlBundles> <act:ControlBundle Name="ModalPanelBundle"/> </ControlBundles>

AjaxControlToolkit は、(bundle タグの assembly 属性に記述されているように) アセンブリによってコントロールを解決し、アセンブリ属性値をコントロール名属性値と連結することによって解決します。名前空間がアセンブリ名と異なる場合、ここで例外が発生します!

問題を解決するには、ソフトハードの 2 つの方法があります。

柔らかい

アセンブリ名の部分を反映するようにコントロールの名前空間を変更し、バンドル内のコントロールを構成して正しい型の解決策を取得します。

から <control name="Tools.Web.UI.WebControls.ModalPopupExtender" assembly="CompanyX.ProjectY"></control>

<control name="UI.WebControls.ModalPopupExtender" assembly="CompanyX.ProjectY"></control>

そしてコードで

から namespace Tools.Web.UI.WebControls.ModalPopupExtender {.. public class ModalPopupExtender {} ...}

namespace CompanyX.ProjectY.UI.WebControls.ModalPopupExtender {.. public class ModalPopupExtender {} ...}

難しい

  1. AjaxControlToolkit のソース コードをダウンロードする
  2. ソリューションを開き、AjaxControlToolkit.ToolkitScriptManagerConfigクラスを見つけます。
  3. 159 行目で、次のように変更ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Assembly + "." + control.Name));します。ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Name));
  4. VS2012 を保存して閉じ、プラットフォームのバッチを使用して再構築します。

難しい方法では、コントロールの解決は名前属性によって行われるため、完全な名前空間名を指定できます。

難しい方法が難しすぎる場合は、私に連絡して、変更されたビンを入手してください。難しい方法を適用した後、すべてが再びうまく機能します!

今日、私はそれについて AjaxControlToolkit コードプレックス サイトで提案し、問題を開きました。

于 2013-07-30T16:07:24.607 に答える