3

私のモデルには次のものがあります。

[Required]
[DataType(DataType.EmailAddress)]
public string EmailAddress {get; set;}

ただし、私のビュー (ソース) では、これは次のようにレンダリングされます。

<label for="EmailAddress">EmailAddress</label>
<input data-val="true" data-val-required="The EmailAddress field is required"
    id="EmailAddress" name="EmailAddress" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="EmailAddress" data-valmsg-replace="true">

これはtype="text" ではなくtype="email"でレンダリングされるべきだと思ったので、クライアント側で検証するときに、電子メールが有効な形式でない場合はピックアップされません。

編集

さらに、if (ModelState.IsValid)を呼び出すと、電子メール アドレスの形式が正しくなくても true が返されます。そのため、ブラウザーが HTML5 をサポートしていなくても、コントローラーの IsValid が検証を強制すると考えていたでしょうが、そうではありませんか?

type="email" を強制して有効な電子メールアドレスを正しくチェックするために、モデルに他に必要なものはありますか?

ありがとうございます、

マーク

4

3 に答える 3

7

DataType 属性は、検証を行わず、入力で email 属性をレンダリングしません。この質問では、正規表現または Data Annotations Extensionsライブラリを使用してメール検証を追加する方法について説明します。

また、@Html.TextBoxFor(m => m.Email, new { type = "email" })(HTML5 doctype を使用している場合) 互換性のあるブラウザーの検証を引き起こす email 属性をレンダリングする場合は、これを参照してください。

また、一部の (最新の) スマートフォンでは、入力しやすいようにメール キーボード ( @記号と.comを使用) が表示されるという利点もあります。iPhone の数値、電子メール、および URL キーボードの既定値 を参照してください。

于 2013-04-17T16:09:21.563 に答える
0

この入力タイプは、HTML5 でのみ使用できます。

<input type="email" />

次のように、ドキュメントの doctype を HTML5 に設定することができます。

<!DOCTYPE html>

編集しかし、クライアントブラウザがこの入力を電子メールとして処理/検証できるかどうかはわかりません。

于 2013-04-17T12:42:23.000 に答える