【问题标题】:Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: Could not find UpdatePanel未捕获的 Sys.InvalidOperationException:Sys.InvalidOperationException:找不到 UpdatePanel
【发布时间】:2013-08-01 00:30:28
【问题描述】:

我正在使用 ASP.NET 构建仪表板应用程序,用户可以在其中更改小部件的位置;我为此使用了jquery sortables。小部件是动态添加到页面的 ascx (asp.net usercontrols)。如果用户没有更改小部件的位置,小部件中的每个事件都可以正常工作,但如果位置发生了变化,我会收到此错误。

未捕获的 Sys.InvalidOperationException:Sys.InvalidOperationException:找不到 ID 为“xxx”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中。

这是其中一个小部件的代码,用户可以添加它的多个实例。

<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
   <div class="setting" >
   <asp:TextBox ID="txtwidgettitle" runat="server"></asp:TextBox>
      <div id="settingfooter">
         <asp:LinkButton ID="lnkbtnSave" runat="server" onclick="lnkbtnSave_Click">Save</asp:LinkButton>
         <asp:LinkButton ID="lnkbtncancel" runat="server" CssClass="btn ui-state-default ui-corner-all">Cancel</asp:LinkButton>
      </div>
   </div>
</ContentTemplate>
<Triggers>
   <asp:AsyncPostBackTrigger ControlID="lnkbtnSave" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<div class="pcontent">   
  <asp:Literal ID="ltrtwcontent" runat="server"></asp:Literal>
</div>

以及背后的代码

 protected void Page_Load(object sender, EventArgs e)
{
    ltrtwcontent.Text = jqPlotHelper.RenderChart(CurrentWidgetInstance.Id.ToString());
}
protected void lnkbtnSave_Click(object sender, EventArgs e)
{
    DashboardServices d = new DashboardServices();
    CurrentWidgetInstance.Title = txtwidgettitle.Text;
    CurrentWidgetInstance.LastUpdate = DateTime.Now;
    d.SaveOrUpdateWidgetInstance(CurrentWidgetInstance);

}

在加载控件的 aspx 页面上,我首先有一个动态添加的容器,该容器将添加小部件实例(ascx 控件)

页面上的代码

    protected void Page_Init(object sender, EventArgs e)
    {
        this.SetBasePageVAR(DashboredPageGuid);
        if (this.UsrPage != null)
        {
            phltabs.Controls.Add(LoadDashboardTab());
        }
    }
    public HtmlGenericControl LoadDashboardTab()
    {
       HtmlGenericControl mainList = new HtmlGenericControl("div");
       mainList.Attributes["Id"] = "tabs";
       foreach (WidgetInstance widgetInst in CurrentDashboardTab.WidgetInstances)
       {
         HtmlGenericControl headerList = new HtmlGenericControl("ul");
         WidgetContainerBaseControl widgetContainer = LoadControl("~/Dashboard/WidgetContainer.ascx") as WidgetContainerBaseControl;
         widgetContainer.SetControlVAR(widgetInst);
         headerList.Controls.Add(widgetContainer);
         mainList.Controls.Add(headerList);
       }
       return mainList;
    }

在 WidgetContainer.ascx 上

protected void Page_Init(object sender, EventArgs e)
{
  LoadWidgetInstance();
}
public void LoadWidgetInstance()
{
  WidgetControl widget = LoadControl(CurrentWidgetInstance.Widget.Url) as WidgetControl;
  widget.ID = "wid_" + CurrentWidgetInstance.Id;
  this.phlcontent.Controls.Add(div);
}

【问题讨论】:

  • 你能贴一些代码吗?
  • 那个错误是在哪里抛出的?
  • 我在 js 调试器(firebug)上发现了错误。小部件位置更改后,保存事件将不会响应。
  • @KarlAnderson 我已经发布了代码
  • 你能显示你在哪里将 ascx 对象动态加载到页面中吗?或者这就是“RenderChart”调用在 Page_Load 中的作用?

标签: c# jquery asp.net updatepanel ajaxcontroltoolkit


【解决方案1】:

试试这个:像这样添加触发器并删除 Asps 页面中的触发器

ScriptManager sm = (ScriptManager)Page.Master.FindControl("ScriptManager1");
sm.RegisterPostBackControl(Button);

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 2018-10-18
    • 2020-10-02
    • 2020-11-10
    • 2021-12-03
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多