Найти управление в usercontrol со страницы ASP.NET - PullRequest
1 голос
/ 02 сентября 2010

Я загружаю элемент управления на страницу динамически с помощью LoadControl ("src to file").

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

Сценарий такой.У меня есть страница Edit.aspx, которая загружает пользовательский контроль EditTemplate.ascx.Я хотел бы получить информацию или найти элементы управления в EditTemplate с сайта Edit.aspx.

Я пытался выставить элементы управления и валидаторы в качестве свойств, но как мне получить к ним доступ из моего Edit.aspx?

Пример кода:

Edit.aspx, элемент управления позже добавляется в

Control control = LoadControl("src to ascx");
TemplatePlaceHolder.Controls.Add(control);

EditTemplate.ascx

    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="CompanyImageFile" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>

CodeBehind

public partial class EditTemplate : System.Web.UI.UserControl, IEditTemplate {
    public RequiredFieldValidator Validator {
        get { return this.RequiredFieldValidator1; }
        set { this.RequiredFieldValidator1 = value; }
    }

С сайта Edit.aspx я хотел бы проверить свойство isValid валидаторов.Isvalid устанавливается в методе Save.

Кнопка сохранения, которая сохраняет шаблон, находится в edit.aspx, так что сообщение сделано с этой страницы.

Так что вопрос в том, как получитьудержание свойства из usercontrol на странице edit.aspx, где и как это должно быть сделано?

Еще раз спасибо.

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Вы всегда можете использовать рекурсивный подход.Проверьте решение в блоге Стива Смита:

Recursive-FindControl .

1 голос
/ 02 сентября 2010

Самый простой способ - заставить пользовательский элемент управления определять свойства, такие как:

public IValidator SomeValidator {
  get { return this.cuvValidator; }
  set { this.cuvValidator = value; }
}

public string Text {
  get { return this.txtText.Text; }
  set { this.txtText.Text = value; }
}

Что может использовать ваша страница редактирования.

НТН.

0 голосов
/ 08 сентября 2010

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

public RequiredFieldValidator ValidatorToCheck
{
    get { return this.rfvMyField; }
}

Затем вы можете динамически добавлять свой пользовательский элемент управления в некоторый заполнитель(обязательно назначьте идентификатор пользовательскому элементу управления).

// In my example, this is occurring in the Page_Load event
Control control = LoadControl("~/Controls/EditTemplate.ascx");
control.ID = "ucEditTemplate";
pnlControlHolder.Controls.Add(control); // the placeholder in my example is a panel

Если вы хотите получить доступ к свойству IsValid в указанном валидаторе (предположительно в вашем действии сохранения), вы можете сделать это следующим образом (будучи увереннымдля приведения элемента управления к соответствующему типу и с использованием идентификатора, который вы изначально присвоили пользовательскому элементу управления):

EditTemplate control = (EditTemplate)pnlControlHolder.FindControl("ucEditTemplate");
if (control.ValidatorToCheck.IsValid)
{
    // Some action
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...