我有一个包含一到多行的网格视图(比如大多数行) - 每个都有一个输入文本框。每行都有一个针对该文本框的requiredfieldvalidator。提交表单时,验证gridview,完全有可能多个行有一个空文本框。这导致重复验证消息,例如
是否可以将这些消息合并为一条消息?
我知道可以通过设置验证器类并继承BaseValidator类来创建验证器,该类可用于验证整个gridview。但是当它无效时我会在每一行上放置一个图像,所以我想我每行需要单独的验证器。
答案 0 :(得分:2)
这是一个使用CustomValidator的解决方案,需要进行一些组织更改。这需要回发,因为在服务器端执行CustomValidator验证。
以下是设置:
我们的想法是不再直接允许页面处理那些RequiredFieldValidators,而是让CustomValidator执行此操作。
TextBox RequiredFieldValidator示例(您应该看到具有与上述步骤1相对应的相关ID名称的内容):
选项1:
<asp:RequiredFieldValidator ControlToValidate="txt1" ID="rfv1" runat="server"
EnableClientScript="false" Display="None" ValidationGroup="vgTxtName" />
选项2:
<asp:RequiredFieldValidator ControlToValidate="txt1" ID="rfv1" runat="server"
EnableClientScript="false" Display="Dynamic" ValidationGroup="vgTxtName">*
</asp:RequiredFieldValidator>
CustomValidator标记(您可以将其置于合理的位置,例如ValidationSummary控件旁边):
<asp:CustomValidator ID="cvName" runat="server" Display="None"
ErrorMessage="Please provide text for 'Name' field"
OnServerValidate="cvName_ServerValidate" />
此处的错误消息取代了各个验证器中的错误消息。另请注意,没有ControlToValidate设置,这对此类验证器有效,对于应用涵盖多个控件的验证非常有用。
CustomValidator EventHandler (cvName_ServerValidate):
protected void cvName_ServerValidate(object source, ServerValidateEventArgs args)
{
// Validate vgTxtName group
Page.Validate("vgTxtName");
// .NET 3.5 - add using System.Linq;
args.IsValid = Page.GetValidators("vgTxtName")
.OfType<RequiredFieldValidator>()
.All(v => v.IsValid);
// .NET 2.0 (use either this or the above, not both)
bool isValid = true;
foreach (RequiredFieldValidator validator in Page.GetValidators("vgTxtName"))
{
isValid &= validator.IsValid;
}
args.IsValid = isValid;
}
就是这样!请记住,这仅限于RequiredFieldValidators。您不应在“vgTxtName”组中放置不同类型的验证器,因为cvName逻辑严格处理RequiredFieldValidator类型。如果您打算使用其他验证器类型,则需要设置不同的分组或调整代码。
答案 1 :(得分:0)
我建议不要使用验证器摘要。
将验证器的Text属性或内部内容更改为更适合您的应用程序的内容。
例如......
<asp:Validator ID="X" ... runAt="server" Text="*" />
或
<asp:Validator ID="X" ... runAt="server">*</asp:Validator>
或显示图像......
<asp:Validator ID="X" ... runAt="server"><img src="../path.png" alt="Invalid" /></asp:Validator>
我还将验证器设置为更改为指向帮助光标的指针,并添加ToolTip属性以显示相同的错误消息。