【问题标题】:How to get ScriptManager to work with ScriptmanagerProxy如何让 ScriptManager 与 ScriptmanagerProxy 一起工作
【发布时间】:2013-07-31 15:32:11
【问题描述】:

当我尝试编译我的 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 上移了一点。

【问题讨论】:

标签: c# asp.net scriptmanager


【解决方案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 直到页面后面才会被定义。

这可能有点奇怪,因为您在多个不同的地方定义控件。但是代码隐藏在所有内容放在一起之前不会执行。

【讨论】:

  • 谢谢。这绝对是问题所在。
【解决方案2】:

将 ScriptManager 放在母版页上,将 ScriptManagerProxy 放在 .aspx 页面上。

【讨论】:

    【解决方案3】:

    您需要将脚本管理器放在母版页中的表单声明附近;

    看看这个还有: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.
    

    如果要在内容页面中使用,您必须从母版页中删除脚本管理器,或者在内容页中使用代理并在母版页中添加脚本管理器

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 1970-01-01
      • 2023-02-02
      • 2017-06-25
      • 2020-12-13
      • 2012-02-02
      • 2011-02-22
      • 2013-03-24
      • 2016-07-22
      相关资源
      最近更新 更多