我有一个ASP.Net ListBox,我试图通过jQuery填充,使用以下代码片段:
$("#MyList_btnAddAll").click(function(e) {
e.preventDefault();
$('#MyList_lstAll option').appendTo('#MyList_lstSelected');
});
代码实际上有两个ListBox,一个是“source”,另一个是“destination”。如上所述,ListBox是MyList_lstAll和MyList_lstSelected。这些在浏览器中呈现为元素,正如您所期望的那样。
jQuery工作得很好,项目从一个ListBox移动到另一个,DOM更新但是当我发布我的页面时,回发并不表示对ListBox的任何更改。我知道有一些涉及jQuery和ASP.Net回发的问题,但有人可以指导我一些可能发生的事情,以及我如何让它发挥作用?
[编辑]
根据要求,这里有更多的ASP.Net和HTML结果。下面是包含它们的ascx控件中的ListBox和按钮声明:
<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项目修改没有反映在ViewState中,但是由于它们在发布页面时位于DOM中,它们是否会包含在回发数据中,然后被各自的控件拾取?
答案 0 :(得分:4)
隐藏的输入值将在回发时提供。
答案 1 :(得分:3)
我认为你需要直接从请求获取seletcted item列表,而不是来自asp.net控件属性,如下所示:
string results = Request.Form[list_box.UniqueID];
答案 2 :(得分:1)
问题是您的控件是使用viewstate(或控件状态)在回发时重新创建的,这当然不会反映您的更改。一种可能性是使用服务器端的Request对象直接访问帖子(就像之前Ray所说的那样)