C# 如何动态加载web用户控件?
这是一个非常重要的问题。这让我在4小时内变得疯狂:(我可以加载ucadx.ascx,但如果我单击“在X中搜索”按钮,则不会加载UCSearchX用户控件。有3个按钮,还有3个web用户控件。我想在clickEvents之后加载这3个web用户控件。但下面的方法不起作用。如何动态加载web用户控件?单击(如选项卡控件)C# 如何动态加载web用户控件?,c#,asp.net,.net,visual-studio-2010,C#,Asp.net,.net,Visual Studio 2010,这是一个非常重要的问题。这让我在4小时内变得疯狂:(我可以加载ucadx.ascx,但如果我单击“在X中搜索”按钮,则不会加载UCSearchX用户控件。有3个按钮,还有3个web用户控件。我想在clickEvents之后加载这3个web用户控件。但下面的方法不起作用。如何动态加载web用户控件?单击(如选项卡控件) 使用下面的代码动态加载usercontrol var control = LoadControl(filePath) as ControlType; 然后您可以订阅事件并添加到控
使用下面的代码动态加载usercontrol
var control = LoadControl(filePath) as ControlType;
然后您可以订阅事件并添加到控件占位符
希望这有帮助试试这样的方法
//to load the control
protected void Page_Init(object sender, EventArgs e)
{
ViewState["controlType"] = "AddSector";
//you don't need to check the if condiontion, cause you load every time the controls
AddUserControl();
}
当您需要在回发后从控件获取值时,您应该打开它
protected void Page_PreRender(object sender, EventsArgs args) {
//your placeholder that contains data
}
动态加载时的用户控件需要在加载的每个页面上加载,以便维护其视图状态。因此,您需要类似以下内容:
public string CurrentControlToLoad
{
get
{
if(ViewState["controlType"] == null)
return "";
return (string)ViewState["controlType"];
}
set
{
ViewState["controlType"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(CurrentControlToLoad != "")
LoadControl(CurrentControlToLoad);
}
protected void btnAddSector_Click(object sender, DirectEventArgs e)
{
CurrentControlToLoad = "AddSector";
LoadControl(CurrentControlToLoad);
}
在您的按钮单击事件中,我认为修改ViewState为时已晚。您可能需要会话状态。首先,我不认为4小时对于一个重要问题的解决或变得疯狂或疯狂来说是太多了。我记得几个问题花了我数周时间才解决。其次,与其动态加载这些用户控件,我宁愿将它们放入不同ASP.NET的
面板
控件中,并勾选它们的可见性
属性,我不确定这是否是最好的方法。@Penguen为什么将信息存储在ViewState中而不是将其传递到add控件方法中?void AddUserControl(类型controlType)@顺便说一句,您正在pageLoad上调用AddUserControl方法并单击按钮…这是否意味着您正在尝试添加两个具有相同ID的控件???我不理解受保护的无效页面\u PreRender(对象发送方,事件args){//包含数据的占位符}在这里,您可以获得包含在控件中的控件中的数据,因为prerender事件几乎是最后一次发生,所以您将无法看到之前的值。
public string CurrentControlToLoad
{
get
{
if(ViewState["controlType"] == null)
return "";
return (string)ViewState["controlType"];
}
set
{
ViewState["controlType"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(CurrentControlToLoad != "")
LoadControl(CurrentControlToLoad);
}
protected void btnAddSector_Click(object sender, DirectEventArgs e)
{
CurrentControlToLoad = "AddSector";
LoadControl(CurrentControlToLoad);
}