1

In ASP.NET MVC 3 web application I have a viewmodel with properties which marked with DataType attributes, but they don't do actual validation on cliant side, and on server side, Why?

public class RegisterModel
{
    [Required(ErrorMessage = "Phone number is required")]
    [DataType(DataType.PhoneNumber)]
    [Display(Name = "Phone number")]
    public string PhoneNumber { get; set; }

    [Required(ErrorMessage = "E-mail address is required")]
    [DataType(DataType.EmailAddress, ErrorMessage = "Please enter a valid date (ex: 2/14/2011)")]
    [Display(Name = "E-mail address")]
    public string Email { get; set; }
}

Thanks for replying.

4

4 に答える 4

4

DataType 属性を使用してユーザー入力を検証することはできません。テンプレート化されたヘルパーを使用して値をレンダリングするためのヒントのみを提供します。

Range や Required など、必要な組み込みの検証属性がない場合は、カスタム プロパティの検証属性を作成し、検証のためにモデル プロパティを装飾する必要があります。EG、DataType.EmailAddress 用

これについては、Pro Asp.net mvc 3 Framework (Adam Freeman と Steve Sanderson の 618 ページなど) で説明されています。

于 2011-08-15T09:48:07.630 に答える
0

含めましたか:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

あなたのマスターページで?

また、あなたはあなたの中にこれらが必要ですWeb.config

<appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
于 2011-08-15T08:30:04.047 に答える
0

DataType 属性が検証を実行しないという事実に同意します。ただし、機能するはずの Required 属性が配置されています。

プロパティのコントロールを表示するには、フォームを配置する必要があります。送信時にフォームが投稿されたら、クリックします。

フォームが以下のメソッドに投稿されたとします。

[HttpPost]
        public ActionResult SaveRegisterDetails(Register registerDetails)
        {
            if (ModelState.IsValid)
                return View();
            else
                return View("Index", registerDetails);
        }

ViewModel オブジェクトをパラメーターとして渡します。フォームから投稿されたすべての値は、このオブジェクトに存在します。次に、ModelState が有効かどうかを確認します。有効でない場合は、フォームが投稿された場​​所から同じビューを返し、ViewModel オブジェクトをパラメーターとして渡します。

EditorForModel または DisplyForModel を使用している場合は、ValidationSummary ヘルパーを使用して UI にエラー メッセージを表示します。

于 2013-04-20T19:34:38.110 に答える