1

在ASP.NET MVC 3 Web应用程序中我有一个viewmodel,其属性用DataType属性标记,但它们不会在cliant端进行实际验证,并且在服务器端,为什么?DataType属性不起作用

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; } 
} 

感谢您的回复。

回答

3

数据类型属性不能被用来验证用户输入。它们仅提供使用模板帮助器呈现值的提示。

如果没有内建的验证属性来满足您的需求,例如Range或Required,那么您应该做的是创建自定义属性验证属性并使用该属性修饰您的模型属性以进行验证。例如,对于DataType.EmailAddress

这是在临Asp.net MVC 3框架描述(亚当·弗里曼和史蒂夫·桑德森,618页或左右)

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> 
+0

结果相同 –

+0

也添加了web.config位。往上看。 –

+0

它已经被添加,仍然是相同的结果 –

0

我的事实,数据类型属性不进行任何验证同意。但你有必要的属性,应该工作。

您必须有一个表单来呈现您的属性的控件。当表单发布在提交点击。

假设您的表单发布到下面的方法。

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

传递您的视图模型对象作为参数。从表单发布的所有值都将出现在此对象中。然后检查ModelState是否有效。如果无效,则返回来自表单发布位置的相同视图并传递ViewModel对象作为参数。

如果您使用的是EditorForModel或DisplyForModel,那么请使用ValidationSummary助手在UI上显示错误消息。