0

更新:我完全重新制定了这个问题

我正在尝试实现一种可以动态更改类名的算法。例如:

数据.cs

public class Data
{

    public string text1 { get; set; }
    public string text2 { get; set; }

}

用户1.ascx

public partial class User1 : System.Web.UI.UserControl
{
    public Data datas = new Data();
}

用户2.ascx

public partial class User2 : System.Web.UI.UserControl
{
    public Data datas = new Data();
}

用户.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 工作。任何解决方案都可以。

在这种情况下如何使用泛型?

谢谢你

4

1 回答 1

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);
于 2013-07-10T15:13:37.007 回答