当我尝试编译我的asp.net页面时,我一直在处理一组不寻常的错误。此页面继承自我的母版页。它应该从那里获得Scriptmanager。但我得到的错误表明它不是。
现在我的页面中有这个:
<%@ Page Title="MassUpdate" Language="C#"
MasterPageFile="~/Site1.Master"
AutoEventWireup="true"
CodeBehind="Update.aspx.cs"
Inherits="AdminSite.Update"
MaintainScrollPositionOnPostback="true" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server" >
<div id="contentarea">
<div>
<h3 style="color:Red; padding-left:5px;">
WARNING - This page can push large amounts of data into the database. Use care when using it!
</h3>
</div>
<asp:ScriptManagerProxy runat="server" >
</asp:ScriptManagerProxy>
在我的主页上,我有这个:
<body>
<header>
<div id="banner">
<h1 style="color:#DBFFFF">UAC Parts Admin</h1>
</div>
</header>
<form id="form1" runat="server">
<div id="container">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
<asp:LoginView ID="LoginView1" runat="server" EnableViewState="false">
<LoggedInTemplate>
<div id="menubar">
<h6>Reports</h6>
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" />
<asp:ScriptReference Path="~/Scripts/jqueryui.js" />
<asp:ScriptReference Path="~/Scripts/menubar.js" />
</Scripts>
</asp:ScriptManager>
第一个错误是:
ID为''的控件需要页面上的ScriptManager。 ScriptManager必须出现在需要它的任何控件之前。
当我在我的页面上没有ScriptManager并使用ScriptManagerProxy时会发生这种情况。即使我的主页面上有ScriptManager。
现在当我在我的页面上放置ScriptManager时,我得到了一个不同的错误。
只能将一个ScriptManager实例添加到页面中。
我需要做些什么才能让它发挥作用? 这是我的一个Nuget包的问题吗? (JuiceUI,Widgmo等)
如果请求,我很乐意发布代码。
修改 是的,这一切都很奇怪。奇怪的是,母版页本身没有问题。但只有当其他页面使用它时,我才有任何问题。将表单标记后的第一个元素移动到我认为的解决方案。虽然我也在我的代码中稍微移动了ScriptManagerProxy。
答案 0 :(得分:2)
将ScriptManager放在母版页上,将ScriptManagerProxy放在.aspx页面上。
答案 1 :(得分:2)
您需要将脚本管理器放在主页面中的表单声明附近;
看一下这个:Walkthrough: Creating an Ajax-Enabled Web Site
<body>
<form runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
...
</form>
</body>
第二个问题:ScriptManager Control Overview
Only one instance of the ScriptManager control can be added to the page.
The page can include the control directly, or indirectly inside a nested
component such as a user control, content page for a master page, or nested
master page. If a page already contains a ScriptManager control, but a nested
or parent component needs additional features of the ScriptManager control, the
component can include a ScriptManagerProxy control.
For example, the ScriptManagerProxy control enables you to add scripts and
services that are specific to nested components.
如果要在内容页面中使用,则必须从母版页中删除脚本管理器;如果要在母版页中添加脚本管理器,则必须在内容页面中使用代理
答案 2 :(得分:1)
ScriptManager
必须出现在任何ContentPlaceHolders
之前。通常,如Joshua指出的那样,脚本管理器放在表单标记之后的第一个元素处。像这样:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" />
<asp:ScriptReference Path="~/Scripts/jqueryui.js" />
<asp:ScriptReference Path="~/Scripts/menubar.js" />
</Scripts>
</asp:ScriptManager>
<div id="container">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
原因是因为使用此母版页的.aspx页面提供了放置在ContentPlaceHolder
控件中的内容。由于您的ContentPlaceHolder
出现在ScriptManager
之前,因此您的内容网页中的ScriptManagerProxy
正在投放,因为直到页面后面才会定义ScriptManager
。
这可能有点奇怪,因为您在多个不同的地方定义控件。但是,在将所有内容放在一起之前,代码隐藏不会执行。