2013-07-09 2 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. Любые решения будут работать.

Как я могу использовать дженерики в этом случае?

thank YOU

+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 

И в вашем веб-метод:

+0

Спасибо Jason P, позвольте мне попробовать – INgeek

+1

Вам не нужно бросать в 'User1' или' User2', просто отбрасывать на 'UserControlBase' и избавляться от блока' if'. –

+1

Хорошая точка. Обновлено. –

Смежные вопросы