ASP Web 窗体从视图状态中删除类客户端

ASP Web Forms Removing Class Client-Side from ViewState

本文关键字:删除 客户端 视图状态 Web 窗体 ASP      更新时间:2023-09-26

我正在尝试确定从元素客户端删除类并在视图状态中维护该删除的正确方法。例如,我有一个带有自定义验证器的表单。自定义验证程序将确定一个或多个字段的输入无效。然后,它将向元素添加一个 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,更新面板将是一个快速的解决方案。

另一种选择是将文本框的状态保存在隐藏字段中。 然后,服务器代码将知道要应用于文本框的类。