ASP.Net - 在jQuery填充列表</select>后没有回发的<select>项

时间:2010-08-27 18:41:27

标签: jquery listbox asp.net-2.0 postback

我有一个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中,它们是否会包含在回发数据中,然后被各自的控件拾取?

3 个答案:

答案 0 :(得分:4)

IIRC,由于ASP.Net在回发时ListBox中的期望,你无法让它工作。我过去使用的一种方法是使用runat =“server”创建一个隐藏的输入字段,并在那里填充选定的ID,以分号分隔。

隐藏的输入值将在回发时提供。

答案 1 :(得分:3)

我认为你需要直接从请求获取seletcted item列表,而不是来自asp.net控件属性,如下所示:

string results = Request.Form[list_box.UniqueID];

答案 2 :(得分:1)

问题是您的控件是使用viewstate(或控件状态)在回发时重新创建的,这当然不会反映您的更改。一种可能性是使用服务器端的Request对象直接访问帖子(就像之前Ray所说的那样)