当我需要收回在回发 后 使用JavaScript添加了客户端的html控件时,我偶然发现了这个问题(由于服务器端验证-这不是可选的)。
请告诉我是否要实现此目标的方法是cr * p,并且有更好的方法可以做到这一点。
基本上,我正在做的是在用户单击“添加”时在页面上最多克隆文本框控件10次,并将每个texbox输入的值存储在隐藏字段中以从后面的代码中读取。这很好用,但是,当服务器端验证在回发后没有通过时,所有动态添加( 克隆的 )texbox都消失了,因为ViewState一无所知。
我正在考虑2种可能的解决方案,这两种方法似乎都是很 棘手的 :
使用隐藏字段中的存储值在文档onload()上重建所有克隆的文本框
将表单包装在ajax更新面板中,然后将克隆的texbox放在表单外部,这样就不会在回发时刷新屏幕的这一部分
现在,是否可以通过某种方式“ 更新 ” ViewState,使其了解我使用客户端脚本添加的所有html控件?还有更好的主意吗?我想通过客户端脚本来实现这一点,因此,不考虑在服务器端克隆文本框。
您不能在客户端上修改ViewState。如果这样做,您将使viewstate无效并在回发时收到错误。
在您的情况下,您可能要考虑使用javascript和jQuery在文档就绪事件中使用存储在隐藏字段中的值来呈现文本框。我建议您看一下jQuery模板,特别是如果您可以将数据以JSON格式存储在隐藏字段中的话(http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery- templates-data -将链接和全球化接受为官方的jquery-plugins.aspx)。