コンテンツページのドロップダウンリストを介して動的コントロールを変更します
-
29-09-2019 - |
質問
問題: :updatepanelとプレースホルダーを備えたウィザードコントロールを備えたコンテンツページ。 UpdatePanelの上にはドロップダウンリストがあります。ユーザーがドロップダウンリストの選択を変更したときに、ドロップダウンリストの下に異なる入力コントロールを表示する必要があります。ユーザーがウィザードコントロールで「次の」をクリックすると、これらの動的コントロールからデータを取得できる必要があります。
ポストバック中にそれらのコントロールからデータを取り戻すために、すべての動的コントロールをOnInitメソッドで作成する必要があることを知っています。ただし、ドロップダウンリストのSelectedIndExedChangedイベントが起動されると、OnInitメソッドが呼び出されます...次にPageload ...そして最後に、SelectedIndExchangedイベントのハンドラーが呼び出されます。 viewstateは、oninit&pageloadメソッドが呼び出された後まで復元されていないため、ユーザーがリストボックスで選択したものを知る方法はありません。動的コントロールを作成します。
それで...この問題をどのように解決しますか? JavaScriptを使用して、ページ全体を書く必要がありますか?
前もって感謝します。
解決
私は、このタイプの要件に古い学校の方法を使用する傾向があります。更新パネルに必要なすべてのコントロールを、目に見えるプロパティがfalseに設定されていることを書き込みます。次に、ポストバックでドロップダウンの状態を読み、AppRoperate Controls VisibleプロパティをTrueに設定します。このようにして、「動的な」コントロールはありません。目に見えるプロパティが偽でないコントロールがレンダリングされないという事実により、ユーザーが表示されるまでダウンロードされません。
他のヒント
ANを使用することもできます ASP:Hiddenfield そして、あなたが精神的に作成するケースvarに値を設定します。次に、上に小さなjQueryスクリプトを実行して見てください
$(document).on("change", "#ddlSelector", setControls);
次に、たとえば関数を作成します。
function setControls(event) {
event.preventDefault();
var selector = hiddenfield.val();
}
その場合、表示/非表示にするアイテムは、タグを取得することで実行できます。
$("#elementName").css("display", "inline");
または表示するものはありません。私は職場でこれを使用しました。なぜなら、時々あなたはポストバックを発射せずに変更する必要があるからです。
私は通常、コードとセキュリティの強さのために多くのイベントでjQueryを避けますが、jQueryではドム要素の操作は時々はるかに簡単になります。