Как получить доступ к элементам управления UserConrtorl в этой ситуации - PullRequest
0 голосов
/ 09 апреля 2011
  1. У меня есть UpdatePanel.
  2. и у меня есть PlaceHolder внутри этой панели обновлений.
  3. Существует несколько пользовательских контролей. Один из них будет загружен динамически, согласно некоторым выборам.

    Control mycontrol = this.Page.LoadControl("myusercontrol.ascx");
    myplaceholder.Controls.Add(mycontrol);
    
  4. после загрузки определенного UserControl, я хотел получить текст, написанный на TextBox, который находится в загруженном элементе управления пользователя со страницы родителей.

    TextBox mytextbox = (TextBox) Page.FindControl("myusercontrol")
        .FindControl("mytextbox");
    

Проблема в том, что текст всегда пуст!

Что мне не хватает? Я ценю вашу помощь.

Ответы [ 5 ]

1 голос
/ 11 апреля 2011

Вы должны загрузить свой UserControl, переопределяющий OnInit, как упоминалось ранее. И почему вы искали всю страницу, чтобы найти UserControl? Вы можете использовать PlaceHolder.Controls ...

Вот так у меня получилось

protected override void OnInit(EventArgs e)
{
    Control userControl = this.Page.LoadControl("WebUserControl.ascx");
    testPlaceHolder.Controls.Add(userControl);
    userControl.ID="id"; 
    base.OnInit(e);
}
protected void testButton_Click(object sender, EventArgs e)
{
    Control testUserControl = (Control)testPlaceHolder.Controls[0];
  //Control testUserControl=(Control)testPlaceHolder.FindControl("id");
    TextBox mytextbox = (TextBox)testUserControl.FindControl("testTextBox");
    testButton.Text = mytextbox.Text;
}
0 голосов
/ 11 апреля 2011

Итак, что мне делать?

Просто получите опубликованные значения вручную.

Request.Form[yourcondeol.UniqueID]

отладкой вы можете увидеть все опубликованные данные.

Request.Form
0 голосов
/ 11 апреля 2011

Обычно пользовательские элементы управления используются для инкапсуляции - вы объединяете все детали элементов управления, поведения и т. Д. В UC, чтобы другому коду не приходилось с этим обращаться.UC напрямую - по имени или идентификатору - вы нарушаете модель.Могу ли я предложить вам не делать этого, вместо этого, если вам нужно получить информацию из UC, вы добавляете к нему свойство, событие или метод, который может вызывать контейнер.

Таким образом, если вам нужно изменитьUC - имена элементов управления, типы, стили или дополнительная логика используются позже - вам нужно только изменить это свойство / событие / метод в UC, а не в (например) 100 местах, где оно может использоваться в коде.

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

0 голосов
/ 11 апреля 2011

Рассматривали ли вы добавление свойства в свой пользовательский элемент управления для возврата текста?

например:

public class YourControl : UserControl
{

  public string Text
  {
    get
    {
      return this.TextBox1.Text;
    }
  }
}
0 голосов
/ 09 апреля 2011

Когда вы говорите, что text is always empty, означает ли это, что объект TextBox равен нулю или буквально .Text для текстового поля пуст?

Помните, что в веб-приложениях вы должны отправлять обратно на сервер, чтобы обновлять результаты и обновлять элементы управления, среди прочего.

Попробуйте отправить сообщение обратно на сервер и посмотреть, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...