0

更新:質問を完全に再定式化しました

クラス名を動的に変更するアルゴリズムを実装しようとしています。例えば:

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();
}

ユーザー.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

そしてあなたのWebメソッドで:

//TODO - validate that datas.userfile is appropriate
UserControlBase myControl = page.LoadControl(datas.userfile);
于 2013-07-10T15:13:37.007 に答える