我的母版页面中有一个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>
答案 0 :(得分:3)
我从旧版本的AjaxControlToolkit(从.NET 2.0升级到3.5)更新时遇到了类似的问题。
另一种方法是在母版页中使用ToolscriptManager而不是ScriptManager。任何人都可以通过使用ScriptManagerProxy来演示如何解决这个问题,因为我认为这是解决问题的更好方法吗?
我不明白为什么那会更好。然后,您需要在每个子页面上放置一个ScriptManager。在Master页面上用ToolkitScriptManager替换ScriptManager并完成它有什么问题?
这可以在http://www.asp.net/ajaxlibrary/act_faq.ashx找到:
- ScriptManager控件和ToolkitScriptManager控件之间有什么区别? 我们建议您在使用Ajax Control Toolkit时使用ToolkitScriptManager控件。 ToolkitScriptManager使用比ScriptManager控件更高版本的ASP.NET Ajax。此外,ToolkitScriptManager在服务器上执行自动脚本组合。使用带有ASP.NET 3.5的Ajax Control Toolkit时,您需要使用ToolkitScriptManager
醇>
答案 1 :(得分:2)
ScriptManagerProxy允许内容页面传递对母版页中放置的ScriptManager的引用。
ScriptManagerProxy控件允许用户添加特定于嵌套组件的脚本和服务。如果页面已包含ScriptManager控件。只能将一个ScriptManager控件实例添加到页面中。页面可以直接或间接地在嵌套组件(例如用户控件或嵌套母版页)内包含控件。当ScriptManager控件已经在页面中并且嵌套或父组件需要ScriptManager控件的其他功能时,将使用ScriptManagerProxy控件。
How to use AJAX package ScriptManagerProxy control in ASP.NET
答案 2 :(得分:0)
你只需在body asp或ContentPlaceHolder中添加<asp:ScriptManager ID="ScriptManager1" runat="server" />