問題タブ [composite-controls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - CompositeControl の ViewState に関する問題
ASP.Net で CompositeControl を構築しましたが、ホスティング ページで Control の 3 つのインスタンスの ViewState を維持するのに問題があります。私の CompositeControl にはプロパティ「HeaderText」があり、私の CompositeControl の 3 つのインスタンスはすべて、ページの最初のコントロール インスタンスの値を持っています。
例: 最初のコントロールに HeaderText = "Test 1" がある場合、他のすべてのコントロールにも HeaderText = "Test 1" があります。
デバッグ中に、プロパティの set 演算子が 2 回呼び出されていることがわかりました。Debug.WriteLine() 出力で set 演算子をトレースすると、出力は次のようになります。
c# - カスタム コントロールのネストされた DropDownList に ViewState を保存する
asp.net DropDownList の周りにブーストラップ マークアップの束を本質的にラップするカスタム コントロール (BoostrapDropDown と呼ばれる) を作成しました。結果のコントロール階層は、基本的に次のようになり、DropDownList を除くすべてが HtmlGenericControl になります。
コントロールからネストされた DropDownList に DataSource プロパティを「通過」していましたが、ポストバック時にすべての値を失っていました。
ここが恥ずかしい部分です。1 か月前、Web を検索して解決策を作成できましたが、うまく文書化できませんでした。そして今、ソリューションの作成に使用したページが見つかりません。それがどのように機能しているのかわかりません。誰かが光を当てることができることを願っています。以下は関連するソースコードです。
更新: 完全なコード
コントロールは、次の方法でマークアップで使用されます。
次に、コード ビハインドに次のように記述します。
だからここに私の混乱があります...
- の間
CreateChildControls、DataSourceは元のレンダリングにのみ存在します。そこでDataBind、ネストされた DropDownList を呼び出して、最初に値を設定し、すべてのコントロールの項目をItemsプロパティに格納します。 ItemsViewState への永続化/ViewState からのロード方法を理解していると確信しています。- 私が迷子になったところで、私の
Itemsプロパティはどのようにして DropDownList を再設定するために使用されますか?Load\SaveViewState追加した( と呼ばれる) ことが問題を本当に解決した可能性があると考えていましたがbase.Load\SaveViewState、プロパティへのすべての参照をコメントアウトするとItems、ドロップダウン リストの値が再び失われていました。
ポストバックで世界がどのようにItems再配置されているのですか?!inputControl.Items