私はselect2.jsマルチセレクトを持っています。このマルチ選択で選択した値は、ポストバック後に他のコントロールを作成します。 Select2.jsはポストバックを通じてその内容を保持するように設計ので、私はそれを動作させるためにはJQueryのビットを追加していない:これは、ポストバックを通じて.select2の値を保持するために正常に動作ページライフサイクル - Page_Init()にコントロールに値がありません。Page_load()が遅すぎます
<select id="selectParameters" multiple="true" runat="server" clientidmode ="Static" style="width:100%;" class="textBox;">
</select>
<asp:hiddenField ID="hdnParameters" runat="server" ClientIDMode="Static" />
<script type="text/javascript">
$(document).ready(function() {
$("#selectParameters").select2({
placeholder: "Select parameter(s)"
});
if ($("#hdnParameters").val != "") {
// This is not a postback - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
} else {
// This is a postback - Use the hidden selection to populate the currently selected items
$("#selectParameters").select2("val", $("#hdnParameters").val());
}
$("#selectParameters").on("select2:select", function (e) {
// Selection was updated - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
});
$("#selectParameters").on("select2:unselect", function (e) {
// Selection was updated - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
});
$("#btnAllParameters").click(function(){
// Select all
$("#selectParameters > option").prop("selected", "selected");
$("#selectParameters").trigger("change");
$("#hdnParameters").val($("#selectParameters").val());
return false;
});
$("#btnNoParameters").click(function() {
// De-select all
$("#selectParameters > option").prop("selected", "");
$("#selectParameters").trigger("change");
$("#hdnParameters").val($("#selectParameters").val());
return false;
});
});
</script>
、およびselect2はpage_load中に適切に再生成されます。
他のコードでは、findControl()を使用して、動的に作成されたコントロール(select2コントロールの内容に基づいて作成されたコントロール)に含まれる値にアクセスしています。 findControl()を使用するには、page_init中にコントロールを生成する必要があります。
Private Sub page_init() Handles Me.Init
If IsPostBack Then
Dim parameterSelection = hdnParameters.Value
' Add some controls to the page based upon the contents of parameterSelection
End If
End Sub
上記のコードでは、page_initでこのコードを実行するとparameterSelection = ""です。
私がPage_Loadの中に、同一のコードを実行すると、パラメーター選択は、私が期待した値を取得し、(それらがpage_init中に作成されていなかったので、私は、動的に作成されたコントロール上にFindControl()を使用することはできませんを除き)すべてがうまく動作します
私は、ポストバック後に動的に作成されたコントロールに含まれる値にアクセスできるようなソリューションを探しています。彼らはpage_init中に作成されていなかったとして
- 現在、私は、しかし、動的に作成されたコントロールがにFindControl()を介してアクセスできなくなり、Page_Loadの中にSELECT2をロード
- 私はに基づいて動的にコントロールを作成することはできません。 hidden_fieldとselect2の値がその時点で値を持っていないように、page_init中のselect2の値
いいえ、サーバー側は常に最初に実行されます。選択肢を ''に格納することをお勧めします。そうすれば、javascriptを待つことなくコードビハインドで選択した要素を取得/使用できます。 –
Santi
ちょうど試みました、hdnParametersはpage_initの間に値を持っていません。 –
'runat =" server "'を持つ ''ですか?ポストバック時にその値を保持するASP.Netコントロールなので、私は非表示フィールドを提案しました。 page_init hdnParameters.value =時:<のHiddenField ID = "hdnParameters" にrunat = "サーバー" のClientIDMode = "静的"/ASP> ' "" 私の知る限り、私を見ることができるよう : –
Santi