3

ページで ajax を使用しているため、マスター ページに Ajax スクリプト マネージャーがあります。しかし、コンテンツ ページの 1 つで、AjaxControlToolkit で AutoCompleteExtender を使用する必要があります。これには、ツールキットで利用可能な ToolScriptManager を使用する必要があります。ただし、これにより、 ScriptManager のインスタンスを 1 つだけページに追加できるというエラーが発生します。インターネットで解決策を探しました。多くのプログラマーは、この問題を解決するために ScriptManagerProxy の使用を提案しています。もう 1 つの方法は、ScriptManager の代わりにマスター ページで ToolscriptManager を使用することです。問題を解決するためのより良い方法だと思うので、ScriptManagerProxy を使用してこの問題を解決する方法を誰でも実証できますか?

これが私のマスターページのコードです:

<form runat="server" id="bodyForm">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:ContentPlaceHolder ID="ContentPlaceHolderBodyMain" runat="server">
</asp:ContentPlaceHolder>
</form>

そして、ここに私のコンテンツページのコードがあります:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<asp:TextBox ID="TextBoxStudentID" runat="server" autocomplete="off"></asp:TextBox>
    <asp:AutoCompleteExtender ID="AutoCompleteExtenderStudentID" runat="server" 
    EnableCaching="true" BehaviorID="AutoCompleteEx" MinimumPrefixLength="2" 
       TargetControlID="TextBoxStudentID" ServicePath="~/CampusMateWebService.asmx" ServiceMethod="GetCompletionListForStudentID" 
       CompletionInterval="50" CompletionSetCount="30" 
       CompletionListCssClass="autocomplete_completionListElement" CompletionListItemCssClass="autocomplete_listItem" 
       CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
       DelimiterCharacters=";, :" ShowOnlyCurrentWordInCompletionListItem="true">
    <Animations>
      <OnShow>
      <Sequence>
      <%-- Make the completion list transparent and then show it --%>
      <OpacityAction Opacity="0" />
      <HideAction Visible="true" />

      <%--Cache the original size of the completion list the first time
        the animation is played and then set it to zero --%>
      <ScriptAction Script="// Cache the size and setup the initial size
                                    var behavior = $find('AutoCompleteEx');
                                    if (!behavior._height) {
                                        var target = behavior.get_completionList();
                                        behavior._height = target.offsetHeight - 2;
                                        target.style.height = '0px';
                                    }" />
      <%-- Expand from 0px to the appropriate size while fading in --%>
      <Parallel Duration=".2">
      <FadeIn />
      <Length PropertyKey="height" StartValue="0" 
        EndValueScript="$find('AutoCompleteEx')._height" />
      </Parallel>
      </Sequence>
      </OnShow>
      <OnHide>
      <%-- Collapse down to 0px and fade out --%>
      <Parallel Duration=".2">
      <FadeOut />
      <Length PropertyKey="height" StartValueScript=
        "$find('AutoCompleteEx')._height" EndValue="0" />
      </Parallel>
      </OnHide>
      </Animations>
    </asp:AutoCompleteExtender>
4

3 に答える 3

4

AjaxControlToolkit の古いバージョンからの更新中 (および .NET 2.0 から 3.5 へのアップグレード中) に、同様の問題に遭遇しました。

もう 1 つの方法は、ScriptManager の代わりにマスター ページで ToolscriptManager を使用することです。問題を解決するより良い方法だと思うので、ScriptManagerProxy を使用してこの問題を解決する方法を誰でも実証できますか?

なぜそれがより良い方法なのかわかりません。次に、すべての子ページに ScriptManager を配置する必要があります。マスター ページで ScriptManager を ToolkitScriptManager に置き換えるだけで何が問題になるのでしょうか。

これはhttp://www.asp.net/ajaxlibrary/act_faq.ashxで見つかりました:

  1. ScriptManager コントロールと ToolkitScriptManager コントロールの違いは何ですか? Ajax コントロール ツールキットを使用する場合は、ToolkitScriptManager コントロールを使用することをお勧めします。ToolkitScriptManager は、ScriptManager コントロールより新しいバージョンの ASP.NET Ajax を使用します。また、ToolkitScriptManager は、サーバー上で自動スクリプト結合を実行します。ASP.NET 3.5 で Ajax コントロール ツールキットを使用する場合は、ToolkitScriptManager を使用する必要があります。
于 2013-08-09T17:55:33.863 に答える
2

ScriptManagerProxy を使用すると、コンテンツ ページは、マスター ページに配置された ScriptManager への参照を渡すことができます。

ビデオチュートリアル

ScriptManagerProxy コントロールを使用すると、ユーザーはネストされたコンポーネントに固有のスクリプトとサービスを追加できます。ページに ScriptManager コントロールが既に含まれている場合。ページに追加できる ScriptManager コントロールのインスタンスは 1 つだけです。ページには、ユーザー コントロールや入れ子になったマスター ページなどの入れ子になったコンポーネント内にコントロールを直接的または間接的に含めることができます。ScriptManagerProxy コントロールは、ScriptManager コントロールが既にページにあり、ネストされたコンポーネントまたは親コンポーネントが ScriptManager コントロールの追加機能を必要とする場合に使用されます。

ASP.NET で AJAX パッケージの ScriptManagerProxy コントロールを使用する方法

于 2012-09-04T11:55:52.103 に答える
0

U を追加するだけです: <asp:ScriptManager ID="ScriptManager1" runat="server" />body asp または ContentPlaceHolder に

于 2015-08-20T11:05:33.917 に答える