3

因为我的页面使用 ajax,所以我的母版页中有一个 Ajax 脚本管理器。但是在我的一个内容页面中,我需要在 AjaxControlToolkit 中使用 AutoCompleteExtender,这需要使用工具包中提供的 ToolScriptManager。但这会导致一个错误,即只有一个 ScriptManager 实例可以添加到页面中。我在互联网上搜索解决方案。许多程序员建议使用 ScriptManagerProxy 来解决这个问题。另一种选择是在母版页中使用 ToolscriptManager 而不是 ScriptManager。谁能演示如何使用 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)时,我遇到了类似的问题。

另一种选择是在母版页中使用 ToolscriptManager 而不是 ScriptManager。谁能演示如何使用 ScriptManagerProxy 解决这个问题,因为我认为这是解决问题的更好方法?

我不明白为什么那会是更好的方法。然后,您需要在每个子页面上放置一个 ScriptManager。仅在母版页上用 ToolkitScriptManager 替换 ScriptManager 并完成它有什么问题?

这是在http://www.asp.net/ajaxlibrary/act_faq.ashx上找到的:

  1. ScriptManager 控件和 ToolkitScriptManager 控件有什么区别?我们建议您在使用 Ajax 控件工具包时使用 ToolkitScriptManager 控件。ToolkitScriptManager 使用比 ScriptManager 控件更高版本的 ASP.NET Ajax。此外,ToolkitScriptManager 在服务器上执行自动脚本组合。将 Ajax Control Toolkit 与 ASP.NET 3.5 一起使用时,您需要使用 ToolkitScriptManager
于 2013-08-09T17:55:33.863 回答
2

ScriptManagerProxy 允许内容页面传递对放置在母版页中的 ScriptManager 的引用。

视频教程

ScriptManagerProxy 控件使用户能够添加特定于嵌套组件的脚本和服务。如果页面已经包含 ScriptManager 控件。只能将 ScriptManager 控件的一个实例添加到页面中。该页面可以在嵌套组件(例如用户控件或嵌套母版页)内直接或间接包含控件。当 ScriptManager 控件已经在页面中并且嵌套或父组件需要 ScriptManager 控件的附加功能时,将使用 ScriptManagerProxy 控件。

ASP.NET中如何使用AJAX包ScriptManagerProxy控件

于 2012-09-04T11:55:52.103 回答
0

你只需添加:<asp:ScriptManager ID="ScriptManager1" runat="server" />在正文 asp 或 ContentPlaceHolder

于 2015-08-20T11:05:33.917 回答