ASP Web 窗体从视图状态中删除类客户端
ASP Web Forms Removing Class Client-Side from ViewState
我正在尝试确定从元素客户端删除类并在视图状态中维护该删除的正确方法。例如,我有一个带有自定义验证器的表单。自定义验证程序将确定一个或多个字段的输入无效。然后,它将向元素添加一个 css 类,使其显示为红色:
TextBox_UserName.CssClass += " error";
在客户端,我有一个 onkeyup 函数,它将删除该类,以便当用户开始在该字段中键入时,它会返回到默认样式:
<asp:TextBox ID="TextBox_UserName" runat="server" onkeyup="clearError(event, this)" />
Javascript函数非常简单:
function clearError(event, elem) {
if (event.keyCode != 9 && event.keyCode != 16 && event.keyCode != 13)
$(elem).removeClass('error');
}
这很好用,但我遇到的问题是这样的;假设用户输入一个清除错误类的值,然后他们更改窗体上另一个控件的值,从而导致回发,当窗体在回发后重新加载时,错误类返回到TextBox_UserName控件上。我假设这种情况正在发生,因为该类是通过代码隐藏添加的,因此保存在视图状态中。
有没有办法删除或更新元素的类客户端并将该更改反映在视图状态中?
我唯一能想到的就是向代码隐藏添加逻辑来处理这个问题,但我正在使用的表单有大量字段,所以这并不理想。我想另一种选择是使用 telerik AjaxManager,这样只有导致回发的字段才会受到回发的影响,但这也不是很理想。我希望有一种更好或更有效的方式来完成我试图使用 javascript 完成的任务。我没有找到解决方案,因为我找到的所有内容都谈到了更改视图状态将如何导致错误(我也不想删除它)。
编辑:我选择了这个解决方案:
在我的自定义验证器方法中,我从所有可能受影响的控件中清除错误类。然后,我检查每个字段是否有效,然后将错误类添加到未通过检查的字段中。然后,我更新隐藏字段的值,以指示表单上已发生验证。
在处理触发回发的控件的事件的方法中,我检查是否已发生验证,如果已发生,则调用:
Page.Validate();
这将再次触发我的自定义验证器,并且由于它将首先清除错误类,因此它会为用户尚未修复的字段更新 css 类,同时保留固定字段。
更改客户端的视图状态。 如何将所有导致回发的控件放回更新面板? 这样,在回发期间只有这些控件会受到影响。 就我个人而言,我更喜欢在jQuery中使用AJAX函数进行部分回发,因为它的权重要轻得多。 但是,由于您使用的是Web Forms,如果您不熟悉jQuery AJAX,更新面板将是一个快速的解决方案。
另一种选择是将文本框的状态保存在隐藏字段中。 然后,服务器代码将知道要应用于文本框的类。
- 删除客户端浏览器上不需要的内容
- ASP Web 窗体从视图状态中删除类客户端
- 从客户端删除任何会话
- Redis 客户端不会删除任何内容
- Braintree javascript 客户端 - 拆解调用不会删除现有的集成 - 在我的托管字段上获取错误
- 如何删除主干模型客户端
- 使用 jQuery 在客户端上验证失败后删除冻结面板
- 如何在客户端获取服务器删除/更新收集项的 ID
- 仅在客户端删除网格视图的各个行
- 删除客户端中Upload编辑器的值
- 用javascript更改cssRules在客户端上不是永久性的,在部分发布后会被删除
- MVC通过客户端删除自定义验证规则
- 当客户端不再存在时删除会话
- 从客户端脚本的ASP列表框中删除项目
- 客户端网格行删除
- 删除从客户端发送的值列表
- 添加删除到文本区域内的内容类似于电子邮件客户端
- 使用javascript在JTable中删除记录(仅限客户端)
- 使用JS客户端删除Google Drive文件
- 防止流星从删除MiniMongo数据已经发送到客户端时发布更改