ASP.Net – 在jQuery填充列表后没有回发的项目

我有一个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和按钮声明:

     

结果HTML:

  Item1Item2    Item3Item4  

我知道jQuery / ListBox项目修改没有反映在ViewState中,但由于它们在发布页面时位于DOM中,它们是否会包含在回发数据中,然后被各自的控件拾取?

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

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

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

隐藏的输入值将在回发时可用。

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