Помогите с динамически добавленными элементами управления в .net - PullRequest
1 голос
/ 15 января 2010

Я застрял!Я понимаю жизненный цикл страницы и то, как мне нужно добавить динамические элементы управления на page_init, если я хочу использовать viewstate.Также я знаю, что я должен стараться избегать динамического контроля, когда это возможно.Динамические элементы управления создаются в зависимости от объекта, который создается из пользовательских аргументов события, отправляемых из пользовательского дерева.Проблема в том, что мне нужно viewstate, поэтому мне нужно создать их в page_init, но у меня нет аргументов события для создания объекта, который говорит мне, какие элементы управления добавить до более позднего этапа жизненного цикла.Решение ...

Private Function GetEventArgs() As npTreeViewEventArgs
    Dim control As Control = Nothing
    Dim e As npTreeViewEventArgs = Nothing
    Dim ctrlname As String = Page.Request.Params("__EVENTTARGET")
    Dim args As String = Request.Params("__EVENTARGUMENT")
    If ctrlname IsNot Nothing AndAlso ctrlname <> String.Empty Then
        control = Page.FindControl(ctrlname)
    End If
    If TypeOf control Is npTreeView AndAlso Not String.IsNullOrEmpty(args) Then
        e = New npTreeViewEventArgs(args)
    End If
    Return e
End Function

Я использую это в page_init для создания моего объекта и элементов управления.Это очень грязно для меня.Есть ли другой способ справиться с этим?

Ответы [ 2 ]

2 голосов
/ 15 января 2010

Это на самом деле самое простое решение проблемы такого типа. Если вы не можете добавить все элементы управления на страницу при каждой обратной передаче и использовать видимость для управления их внешним видом, то я бы порекомендовал вам именно то, что вы делаете. (И рекомендовали раньше .)

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

0 голосов
/ 15 января 2010

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

Конечно, это немного сложнее ... но вы поняли. (Я бы опубликовал примеры кода, но это была предыдущая работа, и у меня сейчас нет к ним доступа.)

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