我有一个 ASP.Net ListBox,我尝试使用以下代码片段通过 jQuery 填充它:
$("#MyList_btnAddAll").click(function(e) {
e.preventDefault();
$('#MyList_lstAll option').appendTo('#MyList_lstSelected');
});
该代码实际上有两个列表框,一个是“源”,另一个是“目标”。正如您在上面所知道的,ListBox 是 MyList_lstAll 和 MyList_lstSelected。正如您所期望的那样,它们在浏览器中呈现为元素。
jQuery 运行良好,项目从一个列表框移动到另一个列表框,DOM 已更新,但是当我发布页面时,回发并不表明列表框有任何更改。我知道存在涉及 jQuery 和 ASP.Net 回发的问题,但是有人可以指导我一下可能发生的情况以及如何让它工作吗?
[编辑]
根据要求,这里有更多 ASP.Net 和 HTML 的结果。下面是保存列表框和按钮的 ascx 控件中的声明:
<GLP:ListBox ID="lstAll" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>
<asp:LinkButton ID="lnkAddAll2" CssClass="LIST_SELECT" runat="server" OnClick="btnAddAll_Click"/>
<GLP:ListBox ID="lstSelected" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>
生成的 HTML:
<select class="LIST_BOX_MEDIUM" id="MyList_lstAll" multiple="multiple" name="MyList:lstAll" size="4">
<option value="641">Item1</option><option value="598">Item2</option>
</select>
<input type="submit" class="BUTTON_SMALL_N0_IMAGE" id="MyList_btnAddAll" value="Add All" name="MyList:btnAddAll" style="color: rgb(0, 0, 0);">
<select class="LIST_BOX_MEDIUM" id="MyList_lstSelected" multiple="multiple" name="MyList:lstSelected" size="4">
<option value="642">Item3</option><option value="599">Item4</option>
</select>
我知道 jQuery/ListBox 项目修改不会反射(reflect)在 ViewState 中,但由于在发布页面时它们位于 DOM 中,它们不会包含在回发数据中,然后由各自的控件拾取吗?
最佳答案
IIRC,由于 ASP.Net 在回发时列表框中所期望的内容,您无法使其正常工作。我过去使用的一种方法是使用 runat="server"创建一个隐藏的输入字段,并在其中填充选定的 ID,以分号分隔。
隐藏的输入值将在回发时可用。
关于jquery - ASP.Net -- jQuery 填充列表后 <select> 项目没有被发回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587167/