更新:我完全重新阐述了问题
我正在尝试实现一种动态更改类名的算法。 例如:
Data.cs
public class Data
{
public string text1 { get; set; }
public string text2 { get; set; }
}
User1.ascx
public partial class User1 : System.Web.UI.UserControl
{
public Data datas = new Data();
}
User2.ascx
public partial class User2 : System.Web.UI.UserControl
{
public Data datas = new Data();
}
User.aspx
public partial class User: System.Web.UI.Page
{
[WebMethod]
public static string RequestUC(Data datas)
{
if (datas.userfile = "User1.ascx")
{
User1 userControl = (User1)page.LoadControl(datas.userfile);
}
else
{
User2 userControl = (User2)page.LoadControl(datas.userfile);
}
using (Page page = new Page())
{
userControl.datas = datas; // the error says that the userControl not recognized
page.Controls.Add(userControl);
using (StringWriter writer = new StringWriter())
{
page.Controls.Add(userControl);
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();
}
}
}
}
问题是我无法获得User.aspx的工作。任何解决方案都可行。
在这种情况下如何使用泛型?
谢谢你
答案 0 :(得分:1)
使用继承。
创建基本用户控件类:
public abstract class UserControlBase : System.Web.UI.UserControl {
public abstract Data Datas { get; set; }
}
然后从该类派生每个用户控件(并实现抽象属性,未显示):
public partial class User1 : UserControlBase
public partial class User2 : UserControlBase
在你的网络方法中:
//TODO - validate that datas.userfile is appropriate
UserControlBase myControl = page.LoadControl(datas.userfile);