Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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
Javascript 在位置x向动态ASP.NET表格控件添加新行-回发后Viewstate出现问题_Javascript_C#_Asp.net_Dynamic - Fatal编程技术网

Javascript 在位置x向动态ASP.NET表格控件添加新行-回发后Viewstate出现问题

Javascript 在位置x向动态ASP.NET表格控件添加新行-回发后Viewstate出现问题,javascript,c#,asp.net,dynamic,Javascript,C#,Asp.net,Dynamic,我正在使用ASP.NET/C创建一个动态表控件,该表用于保存表单。我需要允许用户单击一行中的一个按钮,并在原始行的正下方复制该行。我的页面也使用AJAX和jQuery 我尝试使用Table.Rows.AddAt(indexoforigrow+1,newrow),但我得到一个错误,索引超出了值的范围。我想可能我没有正确地获取原始行的索引,所以我只是抛出了一个1,但仍然得到了错误 我还注意到,当我按下按钮执行代码时,表消失了。有没有办法解决这个问题 我在想,如果我无法修复这些问题,我将不得不在表中循

我正在使用ASP.NET/C创建一个动态表控件,该表用于保存表单。我需要允许用户单击一行中的一个按钮,并在原始行的正下方复制该行。我的页面也使用AJAX和jQuery

我尝试使用Table.Rows.AddAt(indexoforigrow+1,newrow),但我得到一个错误,索引超出了值的范围。我想可能我没有正确地获取原始行的索引,所以我只是抛出了一个1,但仍然得到了错误

我还注意到,当我按下按钮执行代码时,表消失了。有没有办法解决这个问题

我在想,如果我无法修复这些问题,我将不得不在表中循环,并将数据提交到临时表,在指示的位置添加新行。然后我会把所有的数据拉出来,然后再显示出来

编辑

当我无法使其正常工作时,我继续前进,并尝试设置我的提交函数来循环数据并将其提交到db,并意识到我在单击“提交”按钮时遇到的问题与单击“添加行”按钮时遇到的问题相同。看来我的问题实际上与ViewState/postback有关


我对此做了一些阅读,从中可以看出,解决方案是每次重新创建页面加载的动态控件。但是,如果我不知道我有多少行/单元格,以及用户输入的信息如何保存在表单中,我就很困惑如何才能做到这一点?我无法将信息保存到数据库或其他地方,因为一旦单击“提交”,所有信息都会消失。

您是否考虑过使用其他控件?其中一个网格控件可能更好地满足您的需要

我通过使用GridView的页脚(以及其他方式)处理了类似于您所描述的情况(听起来)。最大的技巧是将显示对象(表、GridView等)绑定到对象列表。然后操纵对象列表,在列表更改后重新绑定显示对象

您需要以某种方式持久化此列表,否则可能会导致列表重置为空。一种方法是将其保存为会话的一部分


无论如何,我们的想法是将一个显示对象(GridView)绑定到一个对象列表。当用户单击“添加”时,一个项目将添加到列表中。保存列表,然后调用GridView.DataBind方法。

每次加载页面时都重新创建动态表,这是正确的做法。我有类似的事情,我的解决方案是在页面上的一个隐藏字段中保留客户端状态。每次向客户机上的表中添加行时,递增计数器或调整隐藏字段中的状态数据。然后,在服务器上,当页面发回时,读取该隐藏字段,以了解在客户端上添加了多少行。您必须对添加的新行(以及其中的小部件)使用某种命名约定,以便在服务器上重新创建它们


更简单的选择可能是使用UpdatePanel。您的“添加行”按钮将导致部分更新,而不是尝试在客户端上添加行。服务器端代码会将新行添加到表中,并且viewstate会被更新。

我最终让我的data guy做了更多的处理,这样我就可以将ListView绑定到存储过程。解决了我的一些问题


感谢您的宝贵意见。

差不多一年后我才回到这里,因为我在当前项目中遇到了类似的问题。我第一次做错了几件事。首先,我确实需要在每次加载时重新创建控件,但我还必须在页面周期的早期创建它们。我试图在页面加载期间创建它们,而页面加载是在viewstate加载之后


加载viewstate之前,需要使用相同的ID重新创建控件。我使用了page init,它工作得很好。

好的,所以我进行了调试,当我尝试添加新行时,表的行数看起来是0。不确定这是如何发生的,因为已经创建了表。在我的c#中,表创建脚本和表添加脚本位于不同的函数中,我认为这与此无关,因为页面中的两个引用对象都存在。当我的onclick函数运行时,肯定存在0行的问题。尽管如此,按钮和表都在updatepanels中,所以我不确定为什么它们会像回发一样被清除。我猜表在页面生命周期中动态创建得太晚了。是否要共享更多?该表是在生命周期后期创建的。嗯,这不完全正确。我在design视图中创建了表本身,但在用户选择一些选项、点击按钮调用SQL存储过程之前,不会创建任何行/单元格,然后用存储过程返回的数据填充表。我不相信我可以使用其他控件,因为数据的性质以及我如何从数据库中引入数据。用户需要选择用户和评估,然后单击按钮生成表格。我需要遍历从SQL返回的数据,添加不同类型的控件,进行一些数据处理,等等,然后将最终产品添加到单元格中。我认为用一个需要数据源的控件无法实现这一点。不幸的是,虽然这将更新客户端上的表,但动态添加的行在回发中不可用