2012-07-04 7 views
0

У меня есть простой вопрос в asp.net. Я хочу знать, можно ли получить данные из элементов управления в моем пользовательском элементе управления напрямую. Я хочу сделать это без использования переменной Session, Viewstate ...Получить данные из пользовательского элемента управления с веб-страницы

EDIT: Теперь я использую метод объявления общедоступных переменных в UC.

Вот часть Page_Load от моей родительской страницы:

this.plan_action = (UCPlan)Page.LoadControl("~/Association/UCPlan.ascx"); 
PlaceHolder1.Controls.Add(this.plan_action); 

if (this.plan_action.Validate == true) 
     { 
      CheckBox1.Checked = true; 
      //String référence = Session["liste_action"].ToString(); 

      for (int i = 0; i < this.plan_action.List1.Count; i++) 
      { 
       Label8.Text += this.plan_action.List1[i].Référence + "/"; 
       //Label8.Text += "/"; 
      } 


     } 

но мое переменная Validate пребывание лжи.

Вот код, в котором изменить значение переменной валидации с ним декларация:

private bool validate; 

    public bool Validate 
    { 
     get { return validate; } 
     set { validate = value; } 
    } 


protected void Button2_Click(object sender, EventArgs e) 
     { 


      //myCommand.Connection = myConnection; 
      //Session["liste_action"] = this.List; 
      this.Validate = true; 
      //Response.Redirect("../Risques_folder/AjouterRisque.aspx"); 


     } 

Спасибо за вашу помощь,

Квентин

+0

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

+0

u означает получение данных на сервере или на клиенте? –

ответ

1

UPDATE благодаря новой информации

Вы должны узнать о sequence of events in ASP.NET.

Load страницы происходит длительное время до Click обработчика Button2 в вашем UserControl ... поэтому Validate свойства всегда будет установлено в false.

У вас есть два очевидных варианта (как я вижу) ...

Keep создание UserControl в вашем Page_Load (или, предпочтительно, переместить его на свой Page_Init, так как это, как правило, является наиболее подходящим местом для Это). Затем поместите чек на Validate в Page_PreRender.

Или создайте Event в своем UserControl, Raise это событие нажатием кнопки Button2 и обработайте событие на странице.


ДРУГОЙ UPDATE

Для 2 из двух вариантов выше, в вашем UserControl класса имеют следующие ...

public delegate void ButtonClickedDelegate(object sender, EventArgs e); 
public event ButtonClickedDelegate ButtonClicked; 

Button2_Click В методе из UserControl (после установка this.Validate = true;) звонок ...

ButtonClickedDelegate(sender, e); 

В Page_InitPage наденьте что-то вроде ...

ctrl1.ButtonClicked += new UCPlan.ButtonClickedDelegate(ctrl1_ButtonClicked); 

А затем новый метод под названием что-то вроде

void ctrl1_ButtonClicked(object sender, EventArgs e) 
{ 
    if (ctrl1.Validate) 
    { 
     ... 
    } 
} 

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

Дополнительную информацию о delegates и events на MSDN.



ОРИГИНАЛЬНЫЙ ОТВЕТ

Если я не что-то пропустили, это очень простая концепция ASP.NET ...

Вы можете создать свойства и/или методы.

Например, как свойство ...

public string MyProperty 
{ 
    get { return "My Property Value"; } 
} 

Или как метод

public string MyMethod() 
{ 
    return "My Method Value"; 
} 

Если вы говорите о прохождении значения между UserControl и ASP .NET Page, который содержит его, а затем в вашем Page, вы можете просто вызвать это свойство или метод. Если элемент управления был вызван (например) myCtrl, то вы можете что-то вроде ...

string prop = myCtrl.MyProperty; 
string meth = myCtrl.MyMethod(); 

(На обратной стороне большой комментарий от Ahmed El-HAROUNY)
Если вы говоря о передаче значений на клиентскую страницу, вы можете использовать те же свойства/методы непосредственно в разметке HTML. Однако, в этом случае свойство/метод может быть объявлен как protected, а не public

Например, для отображения значения ...

<%=MyProperty%> 

Или

<%=MyMethod()%> 

или если вы я собираюсь использовать значение в javascript, что-то вроде ...

var myProp = "<%=MyProperty%>"; 
+0

Привет, спасибо за ваш ответ. Я пробовал это решение, но, похоже, оно не работает. Фактически, когда я нажимаю на определенный элемент управления в своем UC, логическая переменная переходит к true в событии. После этого я тестирую эту переменную на своей веб-странице, но она остается ложный. – Quentin91360

+0

Вы уверены, что правильная последовательность? Является ли переменная устанавливаемой параметром 'event' * after * на странице? Установили ли вы контрольные точки? (Извините, это, наверное, глупые вопросы, но я должен спросить!) – freefaller

+0

Я редактировал свой вопрос с помощью своего кода. – Quentin91360

1

Да Это возможно, но выставляя элементы управления в UserControl как Public.

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