0

私のカスタム コントロールには、ダイナミック コントロールを ItemDatabound のプレースホルダーに追加するリピーターが含まれています。

動的コントロールの更新された値にアクセスする際に問題が発生しています。既に Load で動的コントロールを再構築していますが、最初にユーザーが行った変更にアクセスする必要があります。ライフサイクルのどこが更新された動的制御値にアクセスするのに最適な場所なのか理解に苦慮しています。

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

1 に答える 1

0

このページに出くわした人は、これが私を正しい軌道に乗せた Web サイトです 。 .aspx

私の場合、プレースホルダー内に配置していたコントロールも、CheckBox、ListBox、Textbox、RadDatePicker などを決定する列挙型に基づいて動的 (データ駆動型) でした。プレースホルダーに挿入されます。

提供されたリンクのようなすべての動的コントロールを含む 1 つのプレースホルダーではなく、複数のプレースホルダーを持つリピーターがあったため、次のようにソリューションを実装しました。

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);   
            }
        }
    }

リピーターをループして、更新されたクライアント側の値を動的コントロールから取得するコードを実装する必要があります。これが役立つことを願っています。これを解決するには本当に多くの作業が必要でした。

于 2010-09-16T15:48:56.307 に答える