【发布时间】:2016-10-26 20:39:14
【问题描述】:
我有一个 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 期间运行此代码,parameterSelection = ""。
如果我在 page_load 期间运行相同的代码,parameterSelection 会得到我期望的值并且一切运行正常(除了我不能在动态创建的控件上使用 FindControl(),因为它们不是在 page_init 期间创建的)
我正在寻找一种解决方案,以便我可以在回发后访问动态创建的控件中包含的值。
- 目前我在 page_load 期间加载了 select2,但是动态创建的控件将无法通过 FindControl() 访问,因为它们不是在 page_init 期间创建的
- 我无法在 page_init 期间根据 select2 的值创建动态控件,因为当时隐藏字段和 select2 似乎没有值
【问题讨论】:
-
不,服务器端总是先执行。我建议将选择存储在
<asp:Hiddenfield>中,这样您就可以在代码隐藏中获取/使用选定的元素,而无需等待 javascript。 -
刚试过,hdnParameters在page_init期间没有值。
-
是
<asp:Hiddenfield>和runat="server"吗?我建议使用隐藏字段,因为它是一个 ASP.Net 控件,在回发期间保留其值。 -
是的,这是声明:
<asp:hiddenField ID="hdnParameters" runat="server" ClientIDMode="Static" />在 page_init hdnParameters.value = "" 据我所知,我没有在任何地方重置它的值。 -
如果
hdnParameters是隐藏字段,则需要使用.val,而不是.text。
标签: jquery asp.net vb.net select2