7

当我尝试添加用户控件时出现此错误

Only one instance of a ScriptManager can be added to the page 

代码:

.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VisaUserControl.ascx.cs" Inherits="Portal.VisaUserControl" %>
<%@ Register Assembly="BasicFrame.WebControls.BasicDatePicker" Namespace="BasicFrame.WebControls" TagPrefix="dp" %>
<asp:ScriptManager ID="scriptmanager1" runat="server"></asp:ScriptManager>
<div id="divreg" runat="server">
<table id="tbl" runat="server">
    <tr>
    <td>
        <asp:Label ID="lbl2" runat="server"></asp:Label>
    </td>
</tr>
<tr>
<td> Visa Number:</td>
<td><asp:TextBox ID="txtUser" Width="160px" runat="server"/></td>
<td> Country Name:</td>
<td><asp:DropDownList ID="dropCountry" Width="165px" runat="server"></asp:DropDownList></td>
</tr>
<tr>
<td> Type of Visa:</td>
<td><asp:DropDownList ID="dropVisa" Width="165px" runat="server" OnSelectedIndexChanged="dropVisa_SelectedIndexChanged"></asp:DropDownList></td>
<td> Type of Entry:</td>
<td><asp:DropDownList ID="dropEntry" Width="165px" runat="server"></asp:DropDownList></td>
</tr>
<tr>
<td> Expiry Date</td>
    <td><asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
        <ajaxToolkit:CalendarExtender ID="CalendarExtender1" runat="server" 
                          TargetControlID="txtDate" PopupButtonID="Imgbtnfromdate" Format="dd/MM/yyyy">
                      </ajaxToolkit:CalendarExtender>
    </td>
<td>
<asp:Button ID="btnRemove" Text="Remove" runat="server" OnClick="btnRemove_Click" />
</td>
</tr>
</table>
</div>

.aspx.cs

  protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);

        GenerateControls();
    }



    private void GenerateControls()
    {
        foreach (string i in NoOfControls)
        {
            VisaUserControl ctrl = (VisaUserControl)Page.LoadControl("VisaUserControl.ascx");
            ctrl.ID = i;
            this.rpt1.Controls.Add(ctrl);
        }
    }

这是问题

    protected void btnAddVisa_Click(object sender, EventArgs e)
    {

        List<string> temp = null;
        var uc = (VisaUserControl)this.LoadControl(@"VisaUserControl.ascx");

        string id = Guid.NewGuid().ToString();
        uc.ID = id;

        temp = NoOfControls;
        temp.Add(id);
        NoOfControls = temp;
        rpt1.Controls.Add(uc);
    }

在下图中,如果单击添加按钮我收到此错误 在此处输入图像描述

有任何想法吗?提前致谢

4

4 回答 4

26

尝试ScriptManager从用户控制中删除。

您肯定在.aspxPage 或 MasterPage 的其他位置添加了 ScriptManager。检查这些页面。

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

如果您需要ScriptManager在母版页上,在这种情况下,不需要在 userControl 中有一个 ScriptManager。遵循以下规则:

  • 确保您在母版页上只有一个<asp:Scriptmanager>
  • <asp:ScriptManagerProxy>确保在每个可能需要脚本管理器的内容页面上也只有一个

以下是MSDN关于ScriptManager控制的内容。

只能将 ScriptManager 控件的一个实例添加到页面中。页面可以直接或间接包含在嵌套组件内的控件,例如用户控件、母版页的内容页或嵌套母版页。如果页面已经包含 ScriptManager 控件,但嵌套或父组件需要 ScriptManager 控件的附加功能,则该组件可以包含 ScriptManagerProxy 控件。例如,ScriptManagerProxy 控件使您能够添加特定于嵌套组件的脚本和服务

于 2013-09-30T05:38:12.007 回答
1

您是否在使用此用户控件的页面上使用脚本管理器?如果您使用用户控制的父页面已经定义了脚本管理器,您将收到错误消息。

最佳实践是在母版页上有 ScriptManager。

从用户控制中删除脚本管理器,它应该可以工作。

看看这里

于 2013-09-30T05:38:11.350 回答
1

看来您正在用户控件中的某个位置使用脚本管理器。

尝试删除它,这个错误的唯一原因是scriptmanager不能在页面中定义超过一次

于 2013-09-30T07:11:44.553 回答
-2

如果使用母版页并且 AjaxControlToolkit 在内部不起作用,则替换:

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

像这样:

<AjaxToolkit:ToolkitScriptManager ID="smContent" runat="server">
</AjaxToolkit:ToolkitScriptManager>

http://forums.asp.net/t/1923659.aspx?Using+ScriptManager+or+ToolkitScriptManager+with+ASP+NET+3+5+AJAX+网站

于 2015-02-08T18:45:50.963 回答