解決策が見つからない問題があります。デフォルトのユーザーコントロールを動的に呼び出す親ページがあります(親ページで選択されたアイテムコンボXに基づく6つの異なるUC)。UC 内で、コンボ ボックスに基づいて UC 内の可視性を制御する JavaScript を挿入 (registerClientscript) します。すべての UC には同じコンボがありますが、この UC 内のコントロールは異なる場合があります。
私が抱えている問題は、最初のロード時に JS が正しく生成されることです...しかし、親からコンボ X を変更すると、UC の部分的な更新がトリガーされ、新しい JS が再登録されます。
function DefineView(sender, eventArgs) {
var comboSearch = $find('%%cmbSearchType%%');
//cmbSearch Section
switch (comboSearch.get_selectedItem().get_value()) {
[[MY CODE HERE]
}
}
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "SearchVisibilityPPSA",jsFunction.Replace("%%cmbSearchType%%", cmbSearchType.ClientID),true);
ご覧のとおり、ClientID を置き換えます。ページの最初の読み込み時に、これは ctl00_PrincipalPlaceHolder_ctl00_cmbSearchType のように正しく解決されますが、Combo X を変更すると、ユーザー コントロールが再読み込みされ、上記のスクリプトが再読み込みされます。レンダリングされた HTML では、COMbo ID は ctl00_PrincipalPlaceHolder_ctl01_cmbSearchType に名前が変更されます (名前が ct00 から ct01 に微妙に変更されていることに注意してください)。私のデバッグでは、この ClientID に新しい ID が含まれていることがわかりましたが、レンダリングされた html で再生成されて置き換えられません。
私の質問は、この UC が呼び出されるたびに JS を強制的に再レンダリングするにはどうすればよいですか? 何らかの理由で、元のレンダリングされた JS を常に使用しています (これが初めて動作する理由です)。