2

2つのUserControls(.ascx)を含むASP.NET2.0Webページがあります。各UserControlには、多数のバリデーターが含まれています。このページにValidationSummaryを配置すると、両方のUserControlのすべての検証エラーが表示されます。各UserControlにValidationSummaryを配置すると、両方のコントロールのすべてのエラーが2回表示されます。

私が欲しいのは、各UserControlのValidationSummaryであり、そのUserControlのエラーのみを表示します。

各ユーザーコントロールのバリデーターのValidationGroupプロパティを動的に設定することで、これを解決しようとしました。そうすれば、各validationsummaryはそのUserControlのエラーのみを表示する必要があります。私はこのコードを使用しました:

foreach (Control ctrl in this.Controls)
{
    if (ctrl is BaseValidator)
    {
        (ctrl as BaseValidator).ValidationGroup = this.ClientID;
    }
}
ValidationSummary1.ValidationGroup = this.ClientID;

ただし、フォームの送信時に検証が行われないため、これによりクライアント側とサーバー側の両方の検証が無効になるようです。

ヘルプ?

4

2 に答える 2

4

フォーム送信の原因となっているコントロール (つまり、Button コントロール) は、ValidationSummary および *Validator コントロールと同じ検証グループの一部である必要があります。

于 2008-09-26T10:01:25.630 に答える
2

ValidationGroups を使用する場合、ポストバックの原因となったコントロールが同じ ValidationGroup に割り当てられている場合にのみ、検証が行われます。

単一のコントロールを使用してポストバックする場合でもこれを行うことができますが、Page.Validate メソッドを明示的に呼び出す必要があります。

Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
    //do stuff
}

提案: ValidationGroup というユーザー コントロールのパブリック プロパティを公開しないのはなぜですか? セッターでは、各バリデーターの検証グループを明示的に設定できます。ループを使用することもできますが、各バリデーターを明示的に設定する方が効率的です。これにより、ユーザー コントロールを使用するコードの可読性が向上する場合があります。

于 2008-09-26T12:27:11.353 に答える