モデルに次のプロパティがあります
[Required]
[DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")]
public string PhoneNumber
{
get;
set;
}
[Required]
[DataType(DataType.EmailAddress, ErrorMessage = "Invalid Email Address")]
public string EmailAddress
{
get;
set;
}
対応するビューは
<td>
Email
</td>
<td>
@Html.EditorFor(model => model.EmailAddress)
@Html.ValidationMessageFor(model => model.EmailAddress, "*")
</td>
</tr>
<tr>
<td>
Phone #
</td>
<td>
@Html.TextBoxFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber, "*")
</td>
このページをレンダリングすると、Required属性がトリガーされているのがわかります。しかし、無効なデータを入力してもDataType属性は起動されません。ソースhtmlが表示され、これらの検証用に発行されたコードが表示されません。私も私の見解の一部として以下を持っています
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"/>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"/>
この投稿を参照してください:
DataTypeAttribute検証はMVC2で機能していますか?
DataType属性は通常、検証ではなくフォーマットの目的で使用されることに注意してください。技術的には、さまざまな電子メール形式と電話番号形式があります(電子メールについては、ここを参照してください: http://www.regular-expressions.info/email.html )。
また、カスタムコンバーターを作成して、一見電子メール以外の文字列を電子メールに変換することもできます(me at domain dot com = [email protected])。したがって、デフォルトの検証regexを使用するとウィンドウから飛び出します。特定の目的のために正しい正規表現を使用し、正確であると信じるアドレスのみを受け入れるようにするのは開発者の責任です。
ASP.NET MVC 3 Futures の使用を検討できます。 ここ はそこでの検証を説明する素晴らしい記事です:
public class UserInformation
{
[Required]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Url]
public string Website { get; set; }
[Required]
[CreditCard]
public string CreditCard { get; set; }
[Required]
[FileExtensions(Extensions = "jpg,jpeg")]
public string Image { get; set; }
}
この質問に関連して、ダウンロード用のサードパーティのデータ検証アノテーションがいくつかあります http://dataannotationsextensions.org/
私自身も同様の問題を抱えていました。電子メールのデータ型でモデルを設定しましたが、電子メールとして検証されていませんでした。 htmlで、ビューが生成した電子メールアドレスのテキストボックスに一種のテキストがあることに気づきました。次に、ビューを次のように変更しました。これで修正されました。
@Html.TextBoxFor(m => m.Email, new { type = "email" })
jquery検証javascriptライブラリを使用していました