Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问DOM以从HTML表服务器端获取值_C#_Asp.net_Custom Controls - Fatal编程技术网

C# 访问DOM以从HTML表服务器端获取值

C# 访问DOM以从HTML表服务器端获取值,c#,asp.net,custom-controls,C#,Asp.net,Custom Controls,我创建了一个美观控件,它在单独的div标记中创建两个列表,每个列表都有一个表。控件始终允许用户单击与每个项目关联的img标记,以便在两个列表之间移动它。我正在通过javascript进行列表之间的所有移动,希望有一个好的方法来获取值,并在回发时将它们存储在两个列表中。我想做一些事情,比如将索引/类存储在隐藏的值中,然后读取它们来查找项目,但这看起来很混乱。另外,我认为可能有一种通过FindControl()遍历DOM的聪明方法,但不确定。任何意见都会很好 另一件事是,这不是一个复合控件。所有标记

我创建了一个美观控件,它在单独的div标记中创建两个列表,每个列表都有一个表。控件始终允许用户单击与每个项目关联的img标记,以便在两个列表之间移动它。我正在通过javascript进行列表之间的所有移动,希望有一个好的方法来获取值,并在回发时将它们存储在两个列表中。我想做一些事情,比如将索引/类存储在隐藏的值中,然后读取它们来查找项目,但这看起来很混乱。另外,我认为可能有一种通过FindControl()遍历DOM的聪明方法,但不确定。任何意见都会很好

另一件事是,这不是一个复合控件。所有标记都在RenderContents()方法中呈现。因此,我不知道是否有一种方法可以像我通常希望代码隐藏访问html元素那样,将runat=“server”属性附加到元素上

下面是生成的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>

项目1
项目2

无法使用FindControl()分析客户端脚本。如果要跟踪客户端上所做的更改,以便调整服务器上的数据,则必须使用隐藏字段存储更改。在这种情况下,隐藏字段是使客户端到服务器交互正常工作的唯一方法。

另一个答案是正确的方法。在一个隐藏字段中存储数据并没有什么内在的混乱。这是客户端和服务器通信的最基本方式

但是我想发布另一种选择,那就是使用AJAX和WebMethod。使用jQuery,这非常简单。您的提交处理程序可以向WebMethod发布关于新列表顺序的任何信息(即使包括所有HTML,如果您真的想这样做,尽管我认为根据需要跟踪状态或顺序值的更改会简单得多)。然后,该方法可以更新数据库。如果您想要真正的花式,您可以使用异步方法实时(例如,每次他们在客户机上移动某物时)访问服务器


在不了解上下文的情况下,这样做可能有些过火,但这是另一种有时间和地点的方式。

我想你需要再次发布代码:)是的,我只是重新浏览了这篇文章,发现格式有问题。我从头开始做了一个重做,有着赤裸裸的骨骼=DUggh,这是我担心的唯一解决方案。我已经开始这样编码了,以防我是对的lol。谢谢你的确认。是的,上下文是一个简单的控件,允许你将一个项目从左边的列表移动到右边的列表。它不需要是实时的,并且使用Web方法将有太多与任务相关的开销。这就是说,这是一个创造性的解决方案,绝对可以达到目的。谢谢你的意见=从理论上讲,使用ajax会减少开销(至少如果您只是按需操作,而不是在他们移动某些内容时)。也就是说,虽然我不知道使用WebMethod时幕后会发生什么,但我认为asp.net足够聪明,可以将其基本上当作一个独立的web处理程序来处理。因此,您只需运行特定于您的活动的代码,并只发布该活动所需的数据,而不是在回发中处理整个网页代码/生命周期。但不管怎么说,在你的情况下,这听起来确实有些过分了!