2つの質問:
ユーザーが送信をクリックしたときのポストバックで、検証サマリーにエラーメッセージを追加するにはどうすればよいですか?
組み込みの.net検証コントロールを使用して特定のテキストボックスを強調表示することもできますか?
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をマークアップに追加するのとは異なり、このメソッドではサーバー側のビジネスロジックに基づいて任意の数の任意のエラーメッセージを追加できます。
ページに直接追加することもできますが、従うべきルールがいくつかあります。
カスタムクラスとIValidatorの実装 を作成することもできます。これにより、1行のコードでメッセージを追加できますが、このメソッドは検証グループをサポートしません。
Anders Fjeldstadの提案に従って、ここに便利な拡張メソッドのセットがあります。
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
カスタムバリデータを追加し、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
;メカニズムは彼が提案したものと同じです。
必要なのは、カスタムバリデーターを作成し、ページのバリデーターコレクションに追加することです(条件が発生した場合)。
CustomValidator cv = new CustomValidator();
if(condition)
{
cv.IsValid = false;
cv.ErrorMessage = "This Catalog Data already exists.";
cv.ValidationGroup = "InputList";
this.Page.Validators.Add(cv);
}
[〜#〜] note [〜#〜]:ValidationGroupの指定を忘れないでください。そうでない場合、エラーメッセージはカスタムバリデータがページに追加されているにもかかわらず表示されます。そして、あなたがあなたの2番目の質問(強調表示テキストボックス)への答えを得たら、それを投稿してください!
検証概要にエラーメッセージを追加するには、ValidationSummaryおよびその他の検証コントロールのEnableClientScriptプロパティを使用できます。 EnableClientScriptをすべてfalseに設定します:
<asp:ValidationSummary
HeaderText="You must enter a value in the following fields :"
DisplayMode="BulletList"
EnableClientScript="false"
runat="server"/>
コントロールを強調表示するために、現在のコントロールでは不可能です。
ただし、検証コントロールを関連するコントロールの近くに配置し、それらのTextプロパティを「*」に設定します。その後、検証が失敗すると、失敗したコントロールの近くに表示されます。
カスタムバリデータを使用して、失敗したコントロールを強調表示することができます。ただし、独自の実装を作成する必要があります。