在回发上,我如何添加错误消息到validation摘要?
两个问题:
在用户单击提交时回发时,如何向validation摘要添加错误消息?
是否也可以使用内置的.netvalidation控件突出显示特定的文本框?
dynamic创build一个CustomValidator控件并将其直接添加到Page.Validators集合中。
Dim err As New CustomValidator err.ValidationGroup = "MyGroup" err.IsValid = False err.ErrorMessage = "The password is invalid" Page.Validators.Add(err)
与将CustomValidator添加到标记不同,此方法允许您添加任意数量的基于服务器端业务逻辑的任意错误消息。
请注意,您也可以直接将其添加到页面,但是有几条规则需要遵循:
- 您必须将控件添加到与validation组的控件相同的命名容器中。
- 如果您不希望validation消息出现在页面的随机位置,您将不得不将validation程序添加到特定的容器中,否则将需要使用CSS类或样式对其进行压缩。
您也可以创build一个自定义类并实现IValidator ,使您可以添加一行代码的消息,但此方法不支持validation组。
Per Anders Fjeldstad的build议,这里有一套方便的扩展方法。
Imports Microsoft.VisualBasic Imports System.Runtime.CompilerServices Public Module PageExtensions <Extension()> _ Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String) p.AddValidationError(errorMessage, String.Empty) End Sub <Extension()> _ Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String, ByVal validationGroup As String) Dim err As New CustomValidator err.ValidationGroup = validationGroup err.ErrorMessage = errorMessage err.IsValid = False p.Validators.Add(err) End Sub End Module
添加一个自定义validation器并手动设置它的IsValid和ErrorMessage属性。 有点像这样:
<asp:panel ID="ErrorsPanel" runat="server" CssClass="ErrorSummary"> <asp:CustomValidator id="CustomValidator1" runat="server" Display="None" EnableClientScript="False"></asp:CustomValidator> <asp:ValidationSummary id="ErrorSummary" runat="server" HeaderText="Errors occurred:"></asp:ValidationSummary> </asp:panel>
在后面的代码中:
// // Update the database with the changes // string ErrorDetails; if (!Db.Update(out ErrorDetails)) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = ErrorDetails; }
这是NightOwl888这个好主意的一个扩展:
public class ValidationError : CustomValidator { public ValidationError(string group, string msg) : base() { base.ValidationGroup = group; base.ErrorMessage = msg; base.IsValid = false; } } public static class PageExtensions { public static void ErrorMessage(this Page page, string group, string msg) { page.Validators.Add(new ValidationError(group, msg)); } }
每当你想发出一个错误消息时,只需调用Page.ErrorMessage
; 机制与他所build议的相同。
那么所有你需要做的就是创build一个自定义validation器,并将其添加到页面的Validator集合中,只要出现这种情况。
CustomValidator cv = new CustomValidator(); if(condition) { cv.IsValid = false; cv.ErrorMessage = "This Catalog Data already exists."; cv.ValidationGroup = "InputList"; this.Page.Validators.Add(cv); }
注意 :不要忘记指定ValidationGroup ,或者在将自定义validation程序添加到页面的情况下,不会显示错误消息。 而且,如果你确实得到了你的第二个问题的答案( 突出显示文本框 ),请发布!
要在validation摘要上添加错误消息,您可以使用ValidationSummary的EnableClientScript属性和其他validation控件。 将EnableClientScript设置为全部为false:
<asp:ValidationSummary HeaderText="You must enter a value in the following fields :" DisplayMode="BulletList" EnableClientScript="false" runat="server"/>
为了突出显示一个控件,不要使用当前的控件。
但我把我的validation控件附近的相关控件,我把他们的Text属性设置为“*”。 然后,如果validation失败,它出现在失败的控制附近。
也许您可以使用自定义validation程序突出显示失败的控件。 但是你应该写自己的实现。