如何在for循环中为空TextBox添加指定CSS类?
解决ASP.NET中For循环为空TextBox添加红色背景样式的问题
你现在的核心问题是把TextBox的文本内容存在了字符串数组里,而不是控件本身,所以没法直接通过数组元素访问控件的CssClass属性。咱们换个思路,直接把TextBox控件实例存入数组,这样就能在循环里直接操作样式了。
具体解决方案步骤:
定义TextBox控件数组:
把需要验证的所有TextBox控件直接放进数组,而不是它们的Text属性值。这样循环时就能直接拿到控件实例,修改样式。先重置所有控件的默认样式:
避免之前的验证残留样式,比如用户之前填过内容又清空,红色边框还留在那里。遍历检查空值并标记错误样式:
逐个检查每个TextBox的文本,为空的就添加你指定的错误样式,同时标记存在空字段。统一显示错误提示:
等所有空字段都标记完后,再弹出提示和模态框,这样用户能看到所有需要填写的字段,而不是只看到第一个。
完整代码示例:
// 1. 定义TextBox控件数组,把需要验证的控件都放进来 TextBox[] requiredTextBoxes = new TextBox[] { txtEndDate, txtLessLeaveTaken, txtnumberOfDaysCovered, txtoperation, txtposition, txtStartDate, txtThissApp, txApprover }; bool hasEmptyFields = false; // 2. 先重置所有文本框的样式为默认(假设你的默认样式是form-control) foreach (TextBox txt in requiredTextBoxes) { txt.CssClass = "form-control"; } // 3. 遍历检查每个文本框,为空的添加错误样式 foreach (TextBox txt in requiredTextBoxes) { if (string.IsNullOrWhiteSpace(txt.Text)) { txt.CssClass = "form-control border-danger"; hasEmptyFields = true; } } // 4. 如果存在空字段,显示提示和模态框 if (hasEmptyFields) { ValidationMessage.Text = "Please fill up all the required fields"; ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", "<script>$('#modal_form_inline').modal('show');$('#modal_form_inline_Confimation').modal('hide');</script>", false); return; }
为什么原来的代码不行?
你之前的countTextbox数组存的是每个TextBox的Text属性值(字符串类型),字符串没有CssClass属性,所以countTextbox[i].cssClass = ...这种写法根本无法访问到控件的样式属性。只有操作TextBox控件实例本身,才能修改它的CssClass。
可选:用For循环替代Foreach
如果你习惯用For循环索引,也可以这样写:
for (int i = 0; i < requiredTextBoxes.Length; i++) { TextBox currentTxt = requiredTextBoxes[i]; currentTxt.CssClass = "form-control"; // 重置样式 if (string.IsNullOrWhiteSpace(currentTxt.Text)) { currentTxt.CssClass = "form-control border-danger"; hasEmptyFields = true; } }
这样就能实现你要的:在循环中给所有空TextBox添加红色边框样式,同时统一提示用户填写必填字段。
内容的提问来源于stack exchange,提问作者Adrian Caspe
相关产品推荐
相关产品推荐

