我创建了一个美学控件,它在单独的div标签中创建了两个列表,每个标签都有一个表格。控件始终由用户单击与每个项目关联的img标记,以在两个列表之间移动它。我正在通过javascript完成列表之间的所有移动,并希望有一个很好的方法来获取值并将它们存储在Postback上的两个列表中。我想做一些事情,比如将索引/类存储在隐藏值中,然后读取它们以查找项目,但这看起来很混乱。此外,认为可能有一种通过FindControl()遍历DOM的聪明方法,但不确定。任何输入都会很棒。
另一件事是这不是复合控制。所有标记都在RenderContents()方法中呈现。因此,我不知道是否有办法将runat =“server”属性添加到elem,就像我通常希望代码可以访问html元素一样。
这是生成的HTML。我认为不需要发布服务器端代码,因为它只是在此时生成html。
<div class="DualListPanel" id="test1">
<div key="test1_Unassigned">
<table class="DLPTable">
<tr>
<td>Item 1</td>
<td><img src="..." onclick="Move(this)" /></td>
</tr>
<tr>
<td>Item 2</td>
<td><img src="..." onclick="Move(this)" /></td>
</tr>
</table>
</div>
<div key="test1_Assigned">
<table class="DLPTable">
</table
</div>
</div>
答案 0 :(得分:1)
您不能使用FindControl()来解析客户端脚本。如果要跟踪客户端上所做的更改,以便可以调整服务器上的数据,则必须使用隐藏字段,存储更改。在这种情况下,隐藏字段是使客户端与服务器交互工作的唯一方法。
答案 1 :(得分:0)
另一个答案是正确的方法。将数据存储在隐藏字段中并不存在任何混乱。这是客户端和服务器通信的最基本方式。
但我想发布另一种选择,即使用AJAX和WebMethod。使用jQuery这很容易。您的提交处理程序可以使用有关新列表顺序的任何信息对WebMethod执行POST(即使包括所有HTML,如果您确实希望以这种方式执行此操作,但我认为跟踪状态或序数值的更改将根据需要进行要简单得多)。然后,该方法可以更新数据库。如果你想得到真正的想象,你可以使用异步方法实时点击服务器(例如,每次他们在客户端上移动某些东西)。
在不知道背景的情况下,这样做可能有点过头了,但这是另一种有时间和地点的方式。