powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Пользовательские элементы управления
4 сообщений из 4, страница 1 из 1
Пользовательские элементы управления
    #32423448
Arik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ помогите второй бень бьюсь немогу понять где ошибка. В общем проблемма такая:
Решил создать элемент управления составленный из группы элементов, который реагировал бы на действия пользователя, а затем обновллялся бы. Создал. Начал прописывать события и вот тут то я и заблудился. У моего класса имеется свойство propertyFruit , которое хранится в строке состояния и содержит номер выделенного элемента списка listFruit . При изменении элемента списка происходит отпровка данных на сервер. Где эти данные должны быть внесены в строку состояния. Далее происходит обновление на основе полученных данных из строки состояния. :) Теоретически всё хорошо. :) Но наверное я чегото пропустил в коде. Потому, что при получении данных не получается как хотелосьбы. :( Либо принемается пустая строка, либо передается пустая строка. Вот и не могу разобраться кто прав, кто виноват.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class SamleControl
    Inherits WebControl
    Implements IPostBackEventHandler

    Private _Fruit As Integer
    Dim listFruit As New DropDownList()
    Dim labelFruit As New Label()

    Public Sub New()
        viewstate( "listFruit" ) =  1 
    End Sub

    Protected Overrides Sub CreateChildControls()
        With listFruit.Items
            .Add( "виноград" )
            .Add( "яблоко" )
            .Add( "груша" )
            .Add( "слива" )
        End With
        listFruit.Attributes( "OnChange" ) = Page.GetPostBackEventReference(Me, _
             CType(listFruit.SelectedIndex, String))
        listFruit.SelectedIndex = _Fruit -  1 
        Me.Controls.Add(listFruit)
    End Sub

    Public Overridable Overloads Sub RaisePostBackEvent(ByVal eventArgument As String) _
             Implements IPostBackEventHandler.RaisePostBackEvent
        labelFruit.Text = CType(eventArgument, Integer)
    End Sub

    Public Property propertyFruit() As Integer
        Get
            Return CType(viewstate( "listFruit" ), Integer)
        End Get
        Set(ByVal Value As Integer)
            viewstate( "listFruit" ) = Value
        End Set
    End Property
End Class


Вот такая вот блин история
...
Рейтинг: 0 / 0
Пользовательские элементы управления
    #32423994
Arik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка вышла. Вместо Implements IPostBackEventHandler нужно по моему использовать Implements IPostBackDataHandler я прав?
...
Рейтинг: 0 / 0
Пользовательские элементы управления
    #32424333
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
строки состояния это ViewState, что ли.
IPostBackEventHandler нужен для создания событий контролса на сервере.
Если ты будешь использовать IPostBackDataHandler, то в функции LoadPostData ты сможешь сравнивать данные до постбака и после. Но тебе этого даже по моему и не нужно.
Тут у тебя очень путано как-то: во-первых, конструктор вызывается при каждом постбаке, твое действие в нем поэтому теряет смысл, и еще ViewState в это время недоступен, во-вторых, как-то ты странно используешь DropDownList, labelFruit вообще не должна рендерится, я не вижу такой команды.
Если ты добавляешь дочерние контролсы, ты можешь обрабатывать их события. Например у DropDownList есть автопостбак, который ты можешь обработать в коде.
Что это за строка listFruit.SelectedIndex = _Fruit - 1?
...
Рейтинг: 0 / 0
Пользовательские элементы управления
    #32425064
Arik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
greenappleЧто это за строка listFruit.SelectedIndex = _Fruit - 1?Ошибочка вышла с прошлой версии осталось. :)

greenapplelabelFruit вообще не должна рендерится, я не вижу такой командыТоже самое... Я там значения проверял. :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class SampleControl
    Inherits WebControl
    Implements IPostBackEventHandler

    Dim listFruit As New DropDownList()

    Public Sub New()
        viewstate( "listFruit" ) =  1  'Сюда будет подгружаться порядковый номер фрукта'
    End Sub

    Private Sub SampleControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
	'Насколько я понимаю постбаки здесь ловить надо.'
         'Но ведь свойство IsPostBack пренадлежит странице.'
    End Sub


    Protected Overrides Sub CreateChildControls()
        With listFruit.Items
            .Add( "виноград" )
            .Add( "яблоко" )
            .Add( "груша" )
            .Add( "слива" )
        End With
        listFruit.SelectedIndex = viewstate( "listFruit" )
        listFruit.AutoPostBack = True 'Задействуем постбак'
        Me.Controls.Add(listFruit)
    End Sub

    Public Property propertyFruit() As Integer
        Get
            Return CType(viewstate( "listFruit" ), Integer)
        End Get
        Set(ByVal Value As Integer)
            viewstate( "listFruit" ) = Value
        End Set
    End Property
End Class


greenappleНапример у DropDownList есть автопостбак, который ты можешь обработать в кодеСвойство Page.IsPostBack использовать не могу. Мне нужно обработать событие в элементе, а не на странице. Как быть подскажи.

Спасибо за ответ.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Пользовательские элементы управления
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]