1

MVC 4 の上記のパッケージに問題があります。ボタンを押してデータを投稿した後でも検証が起動しません。起動するのは、データを送信しようとした後にのみ Required および Email 属性を含む DataAnnotationsExtensions 名前空間からのものだけです。

以下は、MVC 3 で正常に動作する LogOnModel に使用したコードです。

public class LogOnModel 
    { 
        [Required(ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "Required")] 
        [StringLength(50, ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "MinLength6")] 
        [Display(Name = "Username", ResourceType = typeof(YeagerTechResources.Resources))] 
        public string UserName { get; set; } 

        [Required(ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "Required")] 
        [DataType(DataType.EmailAddress)] 
        [Email(ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "Email")] 
        public string Email { get; set; } 

        [Required(ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "Required")] 
        [StringLength(50, ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "MinLength6")] 
        [DataType(DataType.Password)] 
        [Display(Name = "Password4", ResourceType = typeof(YeagerTechResources.Resources))] 
        public string Password { get; set; } 

        [Display(Name = "AcctRemember", ResourceType = typeof(YeagerTechResources.Resources))] 
        public bool RememberMe { get; set; } 
    } 

これは著者のサイトです: http://weblogs.asp.net/srkirkland/archive/2011/02/23/introducing-data-annotations-extensions.aspx およびそれらを使用している別の人への彼の返信 (2012 年 8 月 10 日付け) ) 「.NET 4.0 と 4.5 の両方を使用して、現在の NuGet パッケージが MVC4 で正常に動作することをテストしました。」

以下は、マスターページでのスクリプトのセットアップです。

<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/kendo/2012.2.710/kendo.common.min.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/kendo/2012.2.710/kendo.dataviz.min.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/kendo/2012.2.710/kendo.blueopal.min.css")" rel="stylesheet" type="text/css" /> 
    <script src="~/Scripts/jquery-1.7.1.min.js"></script> 
    <script src="~/Scripts/jquery.validate.min.js"></script> 
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
    <script src="~/Scripts/modernizr-2.5.3.js"></script> 
    <script src="~/Scripts/kendo/2012.2.710/kendo.web.min.js"></script> 
    <script src="~/Scripts/kendo/2012.2.710/kendo.aspnetmvc.min.js"></script> 
    <script src="@Url.Content("~/Scripts/kendo/2012.2.710/jquery.min.js")"></script> 
    <script src="@Url.Content("~/Scripts/kendo/2012.2.710/kendo.all.min.js")"></script> 
    <script type="text/javascript"> 
        $(document).ready(function () 
        { 
            $("#editor-field").css("border", "2px solid #f00"); 
            var strErrCode = '@TempData["ErrCode"]'; 
            switch (strErrCode) 
            { 
                case 'CustView': 
                    alert('@(Resources.CustViewErr)'); 
                    break; 
                case 'CustErr': 
                    alert('@(ViewBag.Error)'); 
                    break; 
                default: 
                    { 
                        if (strErrCode != "") 
                            alert(strErrCode); 
                    } 
                    break; 
            } 
        }); 
    </script> 
    <script> 
        function error_handler(e) 
        { 
            if (e.errors) 
            { 
                var message = "Errors:\n"; 
                $.each(e.errors, function (key, value) 
                { 
                    if ('errors' in value) 
                    { 
                        $.each(value.errors, function () 
                        { 
                            message += this + "\n"; 
                        }); 
                    } 
                }); 
                alert(message); 
            } 
        } 
    </script> 
</head> 

どんな助けでも大歓迎です....私はここで死んでいて、他に向きを変える場所がありません....

4

2 に答える 2

1

正規表現を使用して整数を検証し、

[RegularExpression("^[0-9]*$", ErrorMessage = "The number must be an integer")]
public int Number {get; set;} 

これが問題を解決する最も簡単な方法だと思います。

于 2014-04-30T14:37:35.013 に答える
1

要点は、次のすべてが DataAnnotationExtensions および ExtensionsDataAnnotations.ClientValidation dll で機能することです。

ただし、Min & Maxlength Dataannotations は MVC4 では機能しなくなりました! それは私を夢中にさせていました!

[Required(ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "Required")]
         [StringLength(50, ErrorMessageResourceType = typeof(YeagerTechResources.Resources), ErrorMessageResourceName = "MinMaxLength", MinimumLength = 6)]
         //[StringLength(10, MinimumLength = 2)]
         //[Range(1, 100)]
         //[Min(3)]
         //[MinLength(2, ErrorMessage = "Name must be more than 5 characters")]
         //[MaxLength(5, ErrorMessage = "Name must be more than 5 characters")]
         [Display(Name = "Username", ResourceType = typeof(YeagerTechResources.Resources))]
于 2012-09-11T19:24:16.850 に答える