Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 数据类型属性不起作用_Asp.net Mvc 3_Validation_Attributes_Asp.net Mvc Validation - Fatal编程技术网

Asp.net mvc 3 数据类型属性不起作用

Asp.net mvc 3 数据类型属性不起作用,asp.net-mvc-3,validation,attributes,asp.net-mvc-validation,Asp.net Mvc 3,Validation,Attributes,Asp.net Mvc Validation,在ASP.NET MVC 3 web应用程序中,我有一个viewmodel,其属性用数据类型属性标记,但它们在客户端不进行实际验证,而在服务器端,为什么 public class RegisterModel { [Required(ErrorMessage = "Phone number is required")] [DataType(DataType.PhoneNumber)] [Display(Name = "Phone number")] public s

在ASP.NET MVC 3 web应用程序中,我有一个viewmodel,其属性用数据类型属性标记,但它们在客户端不进行实际验证,而在服务器端,为什么

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; }
}
感谢您的回复。

您是否包括:

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

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

数据类型属性不能用于验证用户输入。它们仅提供使用模板辅助程序呈现值的提示

如果没有用于所需内容(例如范围或必需内容)的内置验证属性,则应创建自定义特性验证属性,并使用该属性装饰模型特性以进行验证。例如,对于DataType.EmailAddress


这在Pro Asp.net mvc 3框架Adam Freeman和Steve Sanderson(第618页)中有描述,数据类型属性不能用于验证用户输入。它们仅提供使用模板辅助程序呈现值的提示

如果没有用于所需内容(例如范围或必需内容)的内置验证属性,则应创建自定义特性验证属性,并使用该属性装饰模型特性以进行验证。例如,对于DataType.EmailAddress


这在Pro Asp.net mvc 3框架Adam Freeman和Steve Sanderson(第618页)中有描述,我同意数据类型属性不执行任何验证的事实。但您已经在适当的位置设置了必需的属性,该属性应该可以工作

必须放置一个窗体才能呈现属性的控件。当表单发布在提交页面上时,单击

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

[HttpPost]
        public ActionResult SaveRegisterDetails(Register registerDetails)
        {
            if (ModelState.IsValid)
                return View();
            else
                return View("Index", registerDetails);
        }
将ViewModel对象作为参数传递。从表单发布的所有值都将出现在此对象中。然后检查ModelState是否有效。如果无效,则返回表单发布位置的相同视图,并将ViewModel对象作为参数传递


如果您使用的是EditorForModel或DisplayForModel,则使用ValidationSummary helper在UI上显示错误消息。

我同意DataType属性不执行任何验证的事实。但您已经在适当的位置设置了必需的属性,该属性应该可以工作

必须放置一个窗体才能呈现属性的控件。当表单发布在提交页面上时,单击

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

[HttpPost]
        public ActionResult SaveRegisterDetails(Register registerDetails)
        {
            if (ModelState.IsValid)
                return View();
            else
                return View("Index", registerDetails);
        }
将ViewModel对象作为参数传递。从表单发布的所有值都将出现在此对象中。然后检查ModelState是否有效。如果无效,则返回表单发布位置的相同视图,并将ViewModel对象作为参数传递


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

对于.NET framework 4.5及更高版本,有一个名为[EmailAddress]的验证属性,请将其用于如下属性

[Required]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessageResourceName = "MustBeEmail", ErrorMessageResourceType = typeof(Resources))]
public string Email { get; set; }
另外,别忘了确保在web.config文件中启用了客户端验证和非干扰性验证


并将js文件包含在razor中。

对于.NET framework 4.5及更高版本,有一个名为[EmailAddress]的验证属性,将其用于您的属性,如下所示

[Required]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessageResourceName = "MustBeEmail", ErrorMessageResourceType = typeof(Resources))]
public string Email { get; set; }
另外,别忘了确保在web.config文件中启用了客户端验证和非干扰性验证


并在razor中包含js文件。

还添加了web.config文件。请参见上文。此答案仅与启用客户端验证的问题有关。这与您的问题无关。也添加了web.config位。请参见上文。此答案仅与启用客户端验证的问题有关。这与你的问题无关。