【发布时间】:2023-03-09 09:52:01
【问题描述】:
这是一个非常重要的问题。这让我在 4 小时内发疯 :( 我可以加载 UCAddX.ascx 但如果我单击“在 X 中搜索”按钮不会加载 UCSearchX 用户控件。有 3 个按钮也有 3 个 web 用户控件。我想加载这 3 个 web clickEvents 之后的用户控件。但是下面的方法不起作用。如何动态加载 Web 用户控件?单击单击(像 Tab 控件)
public partial class MyPage: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ViewState["controlType"] = "AddX";
if (!IsPostBack)
{
AddUserControl();
}
else
{
AddUserControl();
}
}
protected void btnAddX_Click(object sender, DirectEventArgs e)
{
ViewState["controlType"] = "AddX";
if (!IsPostBack)
AddUserControl();
else
AddUserControl();
}
protected void btnSearchX_Click(object sender, DirectEventArgs e)
{
ViewState["controlType"] = "SearchX";
if (!IsPostBack)
AddUserControl();
else
AddUserControl();
}
protected void btnUpdateX_Click(object sender, DirectEventArgs e)
{
}
void AddUserControl()
{
// plhContent1.Controls.Clear();
if (ViewState["controlType"] != null)
{
if (ViewState["controlType"].ToString() == "AddX")
{
UCAddX uc = (UCAddX)Page.LoadControl("~/Pages/EN/MyUserControls/UCAddX.ascx");
uc.ID = "ucAddX";
uc.Attributes.Add("runat", "Server");
uc.EnableViewState = true;
uc.Visible = true;
plhContent1.Controls.Add(uc);
}
else if (ViewState["controlType"].ToString() == "SearchX")
{
UCSearchX uc = (UCSearchX)Page.LoadControl("~/Pages/EN/MyUserControls/UCSearchX.ascx");
uc.ID = "ucSearchX";
uc.Attributes.Add("runat", "Server");
uc.EnableViewState = true;
uc.Visible = true;
plhContent1.Controls.Add(uc);
}
}
}
}
【问题讨论】:
-
在你的按钮点击事件中,我觉得修改ViewState已经来不及了。您可能需要 Session 状态。
-
首先,我认为 4 小时对于解决一个重要问题或发疯或发疯来说并不算多。我记得有几个问题花了我几个星期才解决。其次,而不是动态加载这些用户控件我宁愿将它们放在不同的 ASP.NET 的
Panel控件中并设置它们的Visibility属性,我不确定这是否是最好的方法。
标签: c# asp.net .net visual-studio-2010