2013-07-09 20 views
0

UPDATE的最好辦法:我完全重新的問題什麼是使用類動態

我想實現的算法,將動態改變類的名稱。 例如:

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

什麼意思是「動態加載多個ascx」?你是問你如何有一個加載用戶控件的通用方法,但仍然可以訪問特定於該用戶控件的屬性? –

+0

對不起,我的意思是一個ascx,但動態 – INgeek

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

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); 
+0

感謝Jason P,讓我試試 – INgeek

+1

您不需要投射到User1或User2,只需投射到UserControlBase並擺脫if區塊。 –

+1

好點。更新。 –

相關問題