回发时动态控制的客户端值

时间:2010-09-13 17:52:37

标签: postback client-side placeholder

我的自定义控件包含一个转发器,它将动态控件添加到ItemDatabound上的占位符。

我在访问动态控件的更新值时遇到问题,我已经在负责重建Load上的动态控件,但我首先需要了解用户所做的更改。我只是在理解生命周期中哪些地方是访问更新的动态控制值的最佳位置时遇到了一些麻烦。

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

1 个答案:

答案 0 :(得分:0)

如果有人偶然发现此页面,那么这就是让我走上正轨的网站: 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);   
            }
        }
    }

您仍然需要实现循环遍历转发器的代码,并从动态控件中提取更新的客户端值。我希望这有所帮助,解决这个问题确实需要做很多工作。