2011-07-01 8 views
13

デフォルトASP.net MVC 3インターネットアプリケーションテンプレートは、次のモデルが含まれます。それは、電子メールアドレスを求めているアカウント/登録アクションでモデルのDataTypeAttributeはMVC 3で検証を行いますか?

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

を、あなたがこのフィールドに何も入力することができそうですし、それそれを受け入れる。

DataType(DataType.EmailAddress)は実際に検証をトリガーしますか?それはそうではないようです。型を検証しない場合、その目的は何ですか?

+0

私は同じ問題を抱えていますが、解決策を見つけましたか? – J4N

答えて

0

デフォルトのテンプレートでは、適切なValidate.jsスクリプトがマスターページに追加されません。データ注釈は、クライアント側の検証を行うためにJavaScriptが読み取るHTMLを出力するだけです。

コントローラのアクションでは、サーバー側の検証を確実に行うためにModel.IsValidを実行する必要があります。

+1

デフォルトのテンプレートはそれをすべて追加します。それが私の言うことです。デフォルトのインターネットアプリケーションは、クライアント側のスクリプトを追加します...コントローラアクションにModel.IsValidを追加し、STILLは検証しません。 – Travis

0

私はそのバリデーターを働かせることができず、one found on the ASP.net siteに似た自分自身を書くことになりました。おそらく[EmailAddress]アノテーションはMVC3 Futureで利用可能です。

3

現在のリリースのMVC3では、DataType属性に関連する検証はありません。この属性から派生した新しい属性がMVC Futuresに表示され、この検証プロセスが追加されます。 (例としてEmailAdressAttribute)

10

私が知る限り、DataType属性は書式設定に使用されますが、使用するのは@Html.EditorFor(model => model.Field)です。

モデルフィールド、CSHTMLからの例と結果のHTML:

モデルフィールド:

[Required] 
[DataType(DataType.Text)] 
[Display(Name = "Name")] 
public string Name { get; set; } 

[Required] 
[DataType(DataType.Password)] 
[Display(Name = "Password")] 
public string Password { get; set; } 

[Required] 
[DataType(DataType.MultilineText)] 
[Display(Name = "Description")] 
public string Desc { get; set; } 

CSHTML:

<div class="form-section"> 
    @Html.LabelFor(x => x.Name) 
    @Html.EditorFor(x => x.Name) 
</div> 

<div class="form-section"> 
    @Html.LabelFor(x => x.Password) 
    @Html.EditorFor(x => x.Password) 
</div> 

<div class="form-section"> 
    @Html.LabelFor(x => x.Desc) 
    @Html.EditorFor(x => x.Desc) 
</div> 

結果のHTML:私は知っている

<div class="form-section"> 
    <label for="Name">Name</label> 
    <input class="text-box single-line" id="Name" name="Name" type="text" value=""> 
</div> 
<div class="form-section"> 
    <label for="Password">Password</label> 
    <input class="text-box single-line password" id="Password" name="Password" type="password" value=""> 
</div> 
<div class="form-section"> 
    <label for="Desc">Description</label> 
    <textarea class="text-box multi-line" id="Desc" name="Desc"></textarea> 
</div> 

それは古いですポストは、多分私はこのように来る他人のために、状況に光を当てることができ

EDIT:

ありクライアント側だけが、これらに添付いくつかの検証も可能。実際の検証のため、これらの属性に依存しない、これは常に(クライアント側のみのユーザーエクスペリエンスのためである)editorfor()

0

のデータ型の属性は、テンプレートビューで使用されているサーバー側を行うべきです検証属性ではありません。それらはテンプレート作成に使用されます。例。 DataType.Emailにhtml 5電子メールタグを使用できます。 JakeJさんの詳細。

0

データ型の属性があるを使用している場合

関連する問題