2012-06-20 3 views
0

У меня есть куча методов, которые управляют элементами страницы ASPX, и в этом случае имеет смысл инкапсулировать их в свой собственный статический объект. Тем не менее, похоже, что у меня нет доступа к элементам формы за пределами страницы ASPX. Любые идеи о том, как это сделать?Доступ к элементам ASPX внутри классов

+0

Почему статический объект? У этого действительно нет государства? Кроме того, это то, что вы хотите просто иметь базовый класс, чтобы вы могли наследовать функциональность в дочерних классах? Наконец, если он обрабатывает элементы страницы aspx, имеет ли смысл создавать веб-пользовательский элемент управления с элементами и инкапсулированными функциями? Короче говоря, можете ли вы привести фактический пример того, что у вас есть и чего вы хотите? – NotMe

+0

Я не знаю, что вы подразумеваете под «У меня нет доступа к элементам формы за пределами страницы ASPX». Вы имеете в виду, что используете FindControl, и он ничего не возвращает? Пожалуйста, отправьте образец кода, чтобы объяснить, что вы делаете, и объясните ошибку немного более четко. –

ответ

0

Вам необходимо передать объект страницы в качестве одного из параметров вашим методам класса, таким образом, его элементы будут доступны внутри класса.

Например, если у вас есть класс, как:

public class CMyDataClass { 
    public bool CompareText(System.Web.UI.Page i_oPage) { 
     TextBox oTextBox = i_oPage.FindControl("TextBox1"); 
     return (oTextBox.Text == "My Data"); 
    } 
} 

Вы можете использовать его, как это со страницы:

CMyDataClass oMyDataClass = new CMyDataClass(); 

if (oMyDataClass.CompareText(this)) { 
    Response.Write("Ok!"); 
} 
0

Если вы действительно хотите, чтобы инкапсулировать функциональность, я думаю, вы лучше всего создать класс, в котором вы передаете соответствующие элементы конструктору.

Если вы нацелены на повторное использование на других страницах, вы можете создать базовую страницу, из которой вы наследуете. Другой вариант - сделать материал на главной странице, которую вы ссылаетесь со своих страниц.

Я думаю, что более подробный вопрос требуется, чтобы дать более подробный ответ.

1

Вы должны передать страницу непосредственно в класс, смотрите пример ниже:

ASPX страницу

<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="txtTest" runat="server" Text="Test" /> 
</div> 
</form> 

Code-Behind

protected void Page_Load(object sender, EventArgs e) 
    { 
     Process p = new Process(this); 
     string s = p.GetTextBoxValue(); 
    } 

Класс

public class Process 
    { 
     public Page thePage { get; set; } 

     public Process(Page page) 
     { 
      thePage = page; 
     } 

     public string GetTextBoxValue() 
     { 
      TextBox tb = (TextBox)thePage.FindControl("txtTest"); 
      return tb.Text; 
     } 

    } 

Процесс, вероятно, не лучшее название для класса, но это просто демо.

Кроме того, передача объекта страницы в другой класс плотно сопрягает этот класс с объектом Page. Я бы рекомендовал пересмотреть свой дизайн класса, который вы пытаетесь сделать, чтобы не полностью полагаться на объект страницы.

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