клиентские значения динамического контроля при обратной передаче - PullRequest
0 голосов
/ 13 сентября 2010

Мой пользовательский элемент управления содержит повторитель, который добавляет динамический элемент управления в заполнитель на ItemDatabound.

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

<Repeater>
    <ItemTemplate>
        <Label /><PlaceHolder />

1 Ответ

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

Если кто-то наткнется на эту страницу, то этот сайт поможет мне выбрать верный путь: http://www.learning2code.net/Learn/2009/8/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx

В моем случае элемент управления, который я помещал в свой заполнитель, также был динамическим (управляемым данными) на основе типа перечисления, определяющего, есть ли CheckBox, ListBox, Textbox, RadDatePicker и т. будет вставлен в заполнитель.

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

On the method that adds your dynamic controls to the placeholder (ItemDataBound):  
1. Give the dynamic control a unique ID (string)  
2. Add the unique ID & enum type to the Dictionary<enum, string> that will be stored in the ViewState  

Override the LoadViewState method as follows (this will load your Dictionary<enum, string> array):  
    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);
    }  

Override the OnLoad method to add the dynamic controls that were cleared on postback:
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        if (IsPostBack)
            AddDynamicControlsToPlaceholder();
    }

    private void AddDynamicControlsToPlaceholder()
    {
        foreach (RepeaterItem item in reapeater.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                var keyValue = DynamicDictValues.ElementAt(item.ItemIndex);
                var plhDynControl = item.FindControl("plhDynControl") as PlaceHolder;
                //CreateDynamicControl method uses the key to build a specific typeof control  
                //and the value is assigned to the controls ID property.
                var dynamicControl = CreateDynamicControl(keyValue);
                plhItemValue.Controls.Add(dynamicControl);   
            }
        }
    }

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

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