VB.Net ASP: Контроль доступа в пользовательском элементе управления - PullRequest
1 голос
/ 07 февраля 2011

У меня есть пара пользовательских элементов управления, которые загружаются оператором Select Case.Однако в приведенном ниже файле кода для главной страницы, которая загружает эти элементы управления, ни один из элементов управления asp не отображается в intellisense.У меня было ощущение, что это потому, что элементы управления загружены условно.Мой вопрос, каков наилучший способ решить эту проблему?

1) Загрузите элементы управления и сделайте Select Case в следующем коде, чтобы скрыть их или нет.

2) Есть лиспособ сказать (psuedocode): LoadUserControl("UserControl1").Controls("tbTest").Text = ""

3) Как я могу передать набор данных в файл пользовательского контроля?

4) Есть еще идеи?

Спасибо.

Обновление

Это позволяет мне загружать значения управления и доступа в подэлементы управления.Тем не менее, обновление не работает.Есть идеи?

Private Sub SetFrequencyValues(ByVal frequency As Integer)
    Select Case frequency
        Case 2
            Dim userControl As Minutes = CType(LoadControl("Frequency/Minutes.ascx"), Minutes)
            Dim tb As TextBox = userControl.FindControl("tbMinutes")
            tb.Text = "10"
            tb.Visible = False
        Case(4)
        Case 5
        Case 6
    End Select
End Sub

1 Ответ

1 голос
/ 07 февраля 2011

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

dim uc as MyUserControl = cType(LoadUserControl("UserControl1"), MyUserControl)

и ваш MyUserControl может иметь некоторые свойства, которые вы можете установить

MyUserControl.Data = mySelectedData

Если у вас нет одинаковых элементов управления, вы можете рассмотреть возможность использования интерфейсов

Public Interface IDataForUserControl
    Public Property Data as Object
End Interface

Затем вы можете реализовать этот интерфейс, и если вы загрузите его, вы можете попробовать привести его к интерфейсу.

Если у вас нет этих двух возможностей, вы можете работать с ITemplates и NamingContainers.

Dim control as new MyNamingContainerThatImplementsIDataItem
LoadTemplate("UserControl1").instantiateIn(control)

Чем вы могли бы в вашем UserControl1 получить доступ к данным с помощью DataBinder.

Ответ для вашего обновления

Возможно, где-то есть переопределение. Когда вы вызываете свою функцию обновления? Может быть, mintues.ascx устанавливает те же данные для события load или что-то в этом роде.

Вы можете либо создать метод в «userControl», к которому вы будете обращаться в методе SetFrequencyValues, и тогда к нему больше нельзя будет обращаться. Или вы обрабатываете какое-то событие вашего usercontrol

dim userCOntrol as Minutes = Loadcontrol("Minutes.ascx")
AddHandler userControl.load, sub(sender as Minutes, e as eventargs)
                                  sender.mytextbox.text = "10"
                             end sub

Или на предварительном просмотре, что вы когда-либо хотите.

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