1

ユーザーがウィジェットの位置を変更できる ASP.NET を使用してダッシュボード アプリケーションを構築しています。そのためにjquery sortablesを使用しました。ウィジェットは、ページに動的に追加される ascx (asp.net ユーザー コントロール) です。ユーザーがウィジェットの位置を変更していない場合、ウィジェットのすべてのイベントは正常に機能しますが、位置が変更された場合、このエラーが発生します。

Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: ID 'xxx' の UpdatePanel が見つかりませんでした。動的に更新されている場合は、別の UpdatePanel 内にある必要があります。

これはウィジェットの 1 つのコードで、ユーザーはそのウィジェットの複数のインスタンスを追加できます。

<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);
}
4

1 に答える 1

0

これを試してください:このようにトリガーを追加し、Apsページでトリガーを削除します

ScriptManager sm = (ScriptManager)Page.Master.FindControl("ScriptManager1");
sm.RegisterPostBackControl(Button);
于 2013-11-20T10:09:13.337 に答える