我正在使用UpdatePanel并动态加载内容:
<asp:UpdatePanel runat="server" ID="updatePanel" UpdateMode="Conditional">
<ContentTemplate>
<div id="dashboard-main">
<div id="dashboard-content">
<div class="d-content">
<asp:PlaceHolder runat="server" ID="ContentPanel">
</asp:PlaceHolder>
</div>
</div>
<div id="sub-content">
<ul id="nav-02">
<li class="current">
<asp:LinkButton CommandArgument="Stuff" OnClick="LoadMiniDash" runat="server" ID="myStuff">
My Stuff</asp:LinkButton></li>....
我所做的是按下LinkButton后,我将一个控件加载到ContentTemplate:
protected void LoadMiniDash(object sender, EventArgs e)
{
string miniDashName = ((LinkButton)sender).CommandArgument;
Control control = Page.LoadControl("~/controls/Dashboard" + miniDashName + ".ascx");
ContentPanel.Controls.Clear();
ContentPanel.Controls.Add(control);
updatePanel.Update();
}
我的问题是,在这个新加载的控件中,还有另一个Button。单击后,updatepanel将被清空,并且不会回发到控件。 (但它确实对页面本身发送了一个async的帖子。但是我看到一旦点击控件就不会到达自己的代码了。)
可能是什么问题?
感谢
答案 0 :(得分:1)
我只是想重写你的问题。加载userControl时,它将显示在updatePanel中。当您点击userControl中的按钮时,您的updatePanel会更新 - 您的userControl会“消失”。
Imo它消失了,因为你没有重新加载你的userControl。我尝试了以下代码段:
protected void btnLoadControl_Click(object sender, EventArgs e)
{
/// save the name of the userControl to load in a SessionVar
Session["userControl2Load"] = "ucDemo.ascx";
Control control = LoadControl("ucDemo.ascx");
phDemo.Controls.Clear();
phDemo.Controls.Add(control);
upDemo.Update();
}
/// reload your userControl on every init of the updatePanel
/// when the sessionVar is set
protected void upDemo_Init(object sender, EventArgs e)
{
if (Session["userControl2Load"] != null)
{
string controlName = Session["userControl2Load"].ToString();
Control control = LoadControl(controlName);
phDemo.Controls.Clear();
phDemo.Controls.Add(control);
}
Debug.WriteLine("upDemo Init");
}
它对我有用。如果它也适合你,请告诉我。 HTH
答案 1 :(得分:0)
我遇到过类似的问题..你知道解决这个问题很简单..
逻辑是..如果您在同一页面中有一个或多个更新面板,则所有更新面板的属性应相同,例如
Update Mode : Always
EnableViewState : true(if you are using it)
例如,您在同一个asp.net ajax页面中有3个更新面板,其中包含以下ID
UpdatePanel1
UpdatePanel2
UpdatePanel3
在更新面板1(UpdatePanel1)中,您有一个按钮,该按钮用于指定gridview中的记录。在更新面板1中单击按钮时,UpdatePanel2中的FormView应显示相应的值。
要实现此目的,您需要将(UpdatePanel1,UpdatePanel2)的特定更新面板属性设为
ChildrenAsTrigger : True
EnableViewState : true
RenderMode : Block/Inline
UpdateMode : Always
Visible : true
在UpdatePanel3中执行上述活动值已更改,或者您可以说它不依赖于UpdatePanel1或UpdatePanel2
如果您发现它有用,请将其标记为您的答案,否则请告诉我......