【问题标题】:The ScriptManager must appear before any controls that need itScriptManager 必须出现在任何需要它的控件之前
【发布时间】:2012-11-08 13:20:29
【问题描述】:

我创建了一个新的 ASP.NET Web 应用程序,调试后出现服务器错误

ID 为“WaitingPopup1”的控件需要页面上的 ScriptManager。 ScriptManager 必须出现在任何需要它的控件之前。

我是 ASP.NET 的新手,所以我应该在 web.config 的哪里安装我的 ScriptManager?

【问题讨论】:

  • 只需将 放在弹出控件上方

标签: asp.net webforms


【解决方案1】:

在 ASP.NET 页面上,在表单标签内。

【讨论】:

    【解决方案2】:

    ScriptManager 是需要添加到您创建的页面的控件。

    看看这个Sample AJAX Application

    <body>
        <form runat="server">
            <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
            ...
        </form>
    </body>
    

    【讨论】:

    • 每个表单需要 1 个脚本管理器。因此,如果您有一个母版页,您可以将脚本管理器放在它的表单中,您的所有页面都将从它中受益。
    【解决方案3】:

    只需将ScriptManager 放入form 标记中,如下所示:

    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager> 
    

    如果它有 Master Page 则将其放入母版页本身。

    【讨论】:

      【解决方案4】:

      ScriptManager 是您在页面中注册使用的 Web 控件

      <asp:ScriptManager ID="ScriptManger1" runat="Server" />
      

      在表单标签内

      【讨论】:

        【解决方案5】:

        如果您在页面上使用 microsoft ajax,则需要将 the script manager control 添加到您的母版页或需要它的页面。它管理 ASP.NET Ajax 脚本库和脚本文件、部分页面呈现以及 Web 和应用程序服务的客户端代理类生成

        <asp:ScriptManager ID="ScriptManger1" runat="Server">
        </asp:ScriptManager>
        

        full usage

        <asp:ScriptManager
            AllowCustomErrorsRedirect="True|False"
            AsyncPostBackErrorMessage="string"
            AsyncPostBackTimeout="integer"
            AuthenticationService-Path="uri"
            EnablePageMethods="True|False"
            EnablePartialRendering="True|False"
            EnableScriptGlobalization="True|False"
            EnableScriptLocalization="True|False"
            EnableTheming="True|False"
            EnableViewState="True|False"
            ID="string"
            LoadScriptsBeforeUI="True|False"
            OnAsyncPostBackError="AsyncPostBackError event handler"
            OnDataBinding="DataBinding event handler"
            OnDisposed="Disposed event handler"
            OnInit="Init event handler"
            OnLoad="Load event handler"
            OnPreRender="PreRender event handler"
            OnResolveScriptReference="ResolveScriptReference event handler"
            OnUnload="Unload event handler"
            ProfileService-LoadProperties="string"
            ProfileService-Path="uri"
            RoleService-LoadRoles="True|False"
            RoleService-Path="uri"
            runat="server"
            ScriptMode="Auto|Inherit|Debug|Release"
            ScriptPath="string"
            SkinID="string"
            SupportsPartialRendering="True|False"
            Visible="True|False">
                <AuthenticationService
                    Path="uri" />
                <ProfileService
                    LoadProperties="string"
                    Path="uri" />
                <RoleService
                    LoadRoles="True|False"
                    Path="uri" />
                <Scripts>
                    <asp:ScriptReference
                        Assembly="string"
                        IgnoreScriptPath="True|False"
                        Name="string"
                        NotifyScriptLoaded="True|False"
                        Path="string"
                        ResourceUICultures="string"
                        ScriptMode="Auto|Debug|Inherit|Release" />
                </Scripts>
                <Services>
                    <asp:ServiceReference
                        InlineScript="True|False"
                        Path="string" />
                </Services>
        </asp:ScriptManager>
        

        【讨论】:

        • 如果不使用microsoft ajax,不使用asp:ScriptManager?替代 ScriptManager without 使用 microsoft ajax ?
        【解决方案6】:

        脚本管理器在使用前必须放在页面上。这将直接在页面本身上,或者,如果您正在使用它们,则在母版页上。

        标记将是;

         <asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="true"
                    EnablePartialRendering="true" />
        

        【讨论】:

          【解决方案7】:

          它只是想要您的 ASPX 页面上的 ASP 控件。我通常把我的放在标签下面,或者放在主人正文的第一个内容区域内(如果你使用母版页)

          <body>
              <form id="form1" runat="server">
                  <asp:ScriptManager ID="scriptManager" runat="server"></asp:ScriptManager>
                  <div>
                      [Content]
                  </div>
              </form>
          </body>
          

          【讨论】:

            【解决方案8】:

            您可以在页面的&lt;Form&gt; 标记下方添加脚本管理器标记。以下是放置脚本管理器标记的方法。

                <asp:ScriptManager ID="ScriptManager1" runat="server">
                </asp:ScriptManager>
            

            如果您使用母版页,建议您在母版页中使用脚本管理器,这样您就不必在每个包含 AJAX 控件的页面上一遍又一遍地编写它。

            【讨论】:

            • 我有 MasterPage,但不使用 AJAX 控件,只有 jquery。我需要asp:ScriptManager 吗?
            【解决方案9】:

            在很多情况下,脚本管理器可能会出现这样的问题。你试试这个首先在适当的占位符或任何出现在使用 Ajax 控件的内容之前的占位符中添加脚本管理器。

            1. 我们需要在使用任何 AJAX 控件时添加 ScriptManager,而不仅仅是更新面板。 &lt;asp:ScriptManager ID="ScriptManger1" runat="Server" /&gt;

            2. 如果您使用的是最新的 Ajax 控制工具包(我不确定版本 4.0 还是 4.5),您需要使用特定的 ToolkitScriptManager 而不是默认 Ajax 扩展中的 ScriptManager。

            3. 页面上只能使用一个 ScriptManager 或 ToolKitScriptManager,如果已在母版页上添加,则无需在网页上再次添加。

            4. 这里提到的问题可能是因为 ContentPlaceHolder 请检查您的母版页上有多少内容占位符。举个例子,如果您在母版页上有 2 个内容占位符“Head”和“ContentPlaceHolder1”,而 ContentPlaceHolder1 是您的内容页面。请检查下面的代码,我在这里添加了我在第二个占位符上的 ScriptManager,就在更新面板的下方。

            <!DOCTYPE html>
            
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head runat="server">
                <title></title>
                <asp:ContentPlaceHolder id="head" runat="server">
                </asp:ContentPlaceHolder>
            </head>
            <body>
                <form id="form1" runat="server">
                <div>
                    <asp:ContentPlaceHolder id="MainContent" runat="server">
                    <asp:ScriptManager ID="ScriptManger1" runat="Server" />
                      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                </ContentTemplate>
            </asp:UpdatePanel>
                    </asp:ContentPlaceHolder>
                </div>
                </form>
            </body>
            </html> 
            

            当我们在网页上默认选择母版页时,我们大多数人在设计网页表单时都会犯错误,因为占位符的数量与母版页相同。

            <%@ Page Title="" Language="C#" MasterPageFile="~/Master Pages/Home.master" AutoEventWireup="true" CodeFile="frmCompanyLogin.aspx.cs" Inherits="Authentication_frmCompanyLogin" %>
            
            <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
            </asp:Content>
            <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
            </asp:Content>
            

            我们不需要删除它是指导结构的任何 PlaceHolder,但您必须将 Web 表单内容添加到您添加 ScriptManager(在母版页上)的相同 PlaceHolder 中,或者在适当的占位符或出现的任何占位符中添加脚本管理器在使用 Ajax Control 的内容之前。

            【讨论】:

              【解决方案10】:
              • 带有head 标签和runat="server"
              • 在带有runat="server"form 标签内
              • 在包含需要它的控件的ContentPanels 之前 - 带有UpdatePanels 的典型控件:

              </form>
               </body>
              

              【讨论】:

                【解决方案11】:
                <asp:ScriptManager ID="scriptManager1" runat="server">
                        </asp:ScriptManager>
                

                在标签之后添加上面的代码。 它对我有用。

                【讨论】:

                • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                猜你喜欢
                • 1970-01-01
                • 2010-12-01
                • 2011-02-17
                • 1970-01-01
                • 1970-01-01
                • 2013-10-28
                • 1970-01-01
                • 2022-09-26
                • 1970-01-01
                相关资源
                最近更新 更多