我有一个select2.js多选。此多选中的选定值将导致在回发后创建其他控件。 Select2.js不是为了通过回发保留其内容而设计的,所以我添加了一些JQuery来使其工作:
<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期间正确地重新填充select2。
在代码的其他地方,我使用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期间运行此代码,则参数为“”。
如果我在page_load期间运行相同的代码,则parameterSelection获取我期望的值并且一切运行正常(除非我不能在动态创建的控件上使用FindControl(),因为它们不是在page_init期间创建的)
我正在寻找一种解决方案,以便在回发后可以访问动态创建的控件中包含的值。
答案 0 :(得分:0)
知道了!要在page_init期间检索隐藏字段的值,我使用了:
parameterSelection = Request.Form("ctl00$contentPlaceholder$hdnParameters").ToString.Split(",").ToList
出于某种原因,尽管使用了clientIDMode =&#34; Static&#34;,但是当从表单请求时,控件具有非静态标识符(稍后是否在页面生命周期中分配静态标识符?)
这样做了 - 在调试模式下浏览Request.Form时找到了正确的标识符。
感谢您的建议Santi