在 ASP.NET 的 CodeBehind 中添加和删除“is-invalid”类

Posted

技术标签:

【中文标题】在 ASP.NET 的 CodeBehind 中添加和删除“is-invalid”类【英文标题】:Adding and removing "is-invalid" class from CodeBehind in ASP.NET 【发布时间】:2021-12-02 21:31:45 【问题描述】:

我正在创建一个用户必须填写表格的 ASP 站点。文本框、下拉列表,我使用 Bootstrap 4 作为样式,整个内容都在更新面板中,因此页面感觉响应迅速,无需进行完整的回发。

所以当用户点击提交按钮时,我正在检查是否有任何文本框或下拉列表为空。如果是,我不会插入数据库,而是将“is-invalid”附加到空字段的 CssClass。

Control.CssClass += " is-invalid";

到目前为止,一切都很好。空白字段变红。

但是如果用户填写空白字段并再次单击提交,这些字段仍然是红色的,即使我将“is-invalid”替换为空。

Control.CssClass.Replace(" is-invalid", "");

所以我的问题是,为什么红色没有消失?如果在追加时从 CodeBehind 更改 CssClass 有效,那么为什么在我删除时它不起作用?

PS.:我知道我可以使用 javascript,但我希望整个检查步骤都在一个地方,而不是一半是 .cs 而另一半是 javascript。但是如果我无法从 CodeBehind 中删除,那么我将使用 javascript,但我希望有一个解决方案。

【问题讨论】:

您需要提供minimal reproducible example。 【参考方案1】:

Control.CssClass.Replace(" is-invalid", "");

这会从CssClass 属性中获取string,创建一个没有is-invalid 值的新字符串,然后将新字符串丢弃。该属性的值不会改变。

如果要修改属性的值,需要更新:

Control.CssClass = Control.CssClass.Replace(" is-invalid", "");

【讨论】:

就是这样。伙计,我真是个新手错误。出于某种原因,我相信 .Replace 已经修改了原始字符串。但它没有这样做是有道理的。谢谢,您为我节省了几个小时毫无意义的挫败感,现在效果很好!【参考方案2】:

您在页面生命周期的哪个位置实现了这一点?听起来不错first place to look。

查看您的代码也会很有帮助。

【讨论】:

发布我的整个代码会很多,但基本上我只是在提交按钮的 OnClick 事件中向给定控件的 CssClass 添加/删除“is-invalid”。单击提交按钮刷新更新面板,并在此过程中添加/删除 CssClass。在添加课程的同时,删除课程似乎没有任何效果。所以问题是,为什么它只能以一种方式工作? 当您检查页面时,您是否看到您尝试应用的课程在您希望看到它应用的时间可用?看起来很奇怪,除非它在您尝试应用它的上下文中不存在,否则它不会应用该样式。也许还可以查看您的母版页(如果使用),看看您在加载其样式表与您在页面级别使用的样式是否存在问题。

以上是关于在 ASP.NET 的 CodeBehind 中添加和删除“is-invalid”类的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc c# - 是不是可以从 CodeBehind 中的模型访问视图中文本框的值?

C# (ASP.Net) 将选择值链接到 Codebehind 中的常量

ASP.NET CodeBehind 无法识别 TinyMCE 文本区域更改

如何在 ASP.NET Core MVC 中添加分页,在 AJAX 调用中动态创建的表上

In an ASP.NET website with a codebehind at what point are the .cs files compiled?

Asp.net Page指令