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);
}
你可以張貼一些代碼? –
拋出的錯誤在哪裏? – jadarnel27
我發現了js調試器(firebug)的錯誤。一旦小部件位置發生變化,保存事件將不會響應。 – geab