ユーザーがメールで登録する登録ページがあります。モデルの場合、次のような検証ルールがあります。
RuleFor(x => x.Email).EmailAddress().WithMessage(localizationService.GetResource("Common.WrongEmail"));
今の問題は、設定に基づいて、これを特定のドメインの電子メールに再送信したいという要求があることです。
正規表現の検証を行うだけでこれを行いました
RuleFor(x => x.Email).Matches(customerSettings.RestrictLoginPattern).WithMessage(localizationService.GetResource("Customer.Fields.Email.EnteredPasswordWrongFormat"));
そのため、電子メールが正規表現と一致しない場合、エラー メッセージが表示されます。ここまでは順調ですね。
2 番目の仕様は、ユーザーがドメインを送信できないようにすることです。したがって、user.name@test.comの場合、ユーザーはuser.nameだけを書き込むことができるはずです。
これを行うには、email プロパティの get/set を実行しました
public string Email {
set
{
_email = value;
}
get
{
if (_email == null)
return null;
if(!_email.EndsWith(LoginSuffix))
{
return string.Format("{0}{1}", _email, LoginSuffix);
}
return _email;
}
したがって、 test.comで終わらないものを書くと、それが追加されます。現在の問題は、これがクライアント側で発生しないため、検証で電子メールの形式が正しくないというエラーが表示されることです。
電子メールから取得機能を削除しようとし、検証したプロパティ FormatedEmail を追加しました。FormatedEmail はクライアント側のフォームにないため、正常に動作しますが、検証されない場合、要約エラーのように、電子メール フィールドにフックするエラーを取得できません。
複数のソリューションが表示されます
そのフィールドだけのクライアント側の検証を無効にすることができます。しかし、検索に基づいて、それはおそらく不可能であることがわかりましたか?
カスタムのクライアント側の検証を書くことはできますが、そのような「小さな」問題では非常に複雑に感じます。
どういうわけかエラーをフィールドにバインドする方法はありますか?
ModelState.AddModelError("Email", "Error message");