2013-07-31 100 views
1

我正在使用ASP.NET構建儀表板應用程序,其中用戶可以更改小部件的位置;我爲此使用了jquery sortables。小部件是ascx(asp.net usercontrols),它們被動態添加到頁面中。如果用戶沒有更改小部件的位置,那麼小部件中的每個事件都可以正常工作,但如果位置發生更改,則會出現此錯誤。未捕獲的Sys.InvalidOperationException:Sys.InvalidOperationException:找不到UpdatePanel

未被捕獲的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頁面上加載控制I首先被動態添加容器和容器將添加小部件的實例(該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); 
} 
+1

你可以張貼一些代碼? –

+0

拋出的錯誤在哪裏? – jadarnel27

+0

我發現了js調試器(firebug)的錯誤。一旦小部件位置發生變化,保存事件將不會響應。 – geab

回答

0

試試這個:添加觸發器篩選和刪除平均售價頁的一個

ScriptManager sm = (ScriptManager)Page.Master.FindControl("ScriptManager1"); 
sm.RegisterPostBackControl(Button); 
相關問題