2013-07-31 75 views
1

我一直在處理一些不尋常的錯誤,當我嘗試編譯我的asp.net頁面時。此頁面從我的主頁面繼承。它應該從那裏獲得Scriptmanager。但是我得到的錯誤表明事實並非如此。如何讓ScriptManager與ScriptmanagerProxy配合使用

現在我有這個在我的網頁:

<%@ 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代替時。儘管我的Master頁面上有ScriptManager。

現在,當我在頁面上放置一個ScriptManager時,我得到了一個不同的錯誤。

只有一個ScriptManager實例可以添加到頁面中。

我需要做些什麼才能使其發揮作用? 這是我的一個Nuget包的問題嗎? (JuiceUI,Widgmo等)

如果有要求,我會很高興發佈代碼。

編輯: 是的,這整個事情已經很奇怪。奇怪的母版本身本身沒有問題。但只有當其他頁面使用它時,我纔有任何問題。將它移到表單標記之後的第一個元素是我相信的解決方案。儘管我也在代碼中將ScriptManagerProxy稍微移了一下。

+1

你能在你的母版頁上發佈包含'ScriptManager'的標記,並在你的.aspx頁面上發佈'ScriptManagerProxy'嗎? – Jay

+0

當然,我會這樣做。 –

+0

[ScriptManager必須出現在任何需要它的控件之前]可能的重複(http://stackoverflow.com/questions/13473808/the-scriptmanager-must-appear-before-any-controls-that-need-it) – joshua

回答

1

ScriptManager必須出現r之前有任何ContentPlaceHolders。通常如Joshua指出的那樣,腳本管理器放在form標籤後的第一個元素上。像這樣:

<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

這可能有點奇怪,因爲您正在多個不同的地方定義控件。但是,代碼隱藏不會執行,直到一切都放在一起。

+0

謝謝。這絕對是問題。 –

2

將ScriptManager放在masterpage上,ScriptManagerProxy放在.aspx頁面上。

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. 

你要麼必須從母版頁中刪除腳本經理如果想在內容頁使用或在內容頁中使用代理,並在主頁中添加腳本管理器

相關問題