【问题标题】:Remote Data Annotation not working ASP.NET mvc 4远程数据注释不起作用 ASP.NET mvc 4
【发布时间】:2013-06-16 19:59:44
【问题描述】:

我在使用 [Remote] 属性时遇到了一个严重的问题。所以这是我的代码:

我已经包含了远程验证所需的所有 Jquery 库:

<head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title - My ASP.NET MVC Application</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
        @Scripts.Render("~/bundles/jquery")
        <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js" type="text/javascript"></script>
        <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js" type="text/javascript"></script>
        @RenderSection("scripts", required: false)
    </head>

这也是我在域类上的代码,它被称为 Agence:

public class Agence
    {   
        #region Properties

        [Key]
        [Column("num_siret")]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Display(Name = "Numéro Siret")]
        [Remote("ValidateNumSiretNumberDigits", "RemoteValidation")]
        public long NumSiret { get; set; }
        . . . . . . . 
}

这是我的控制器远程验证:

[AllowAnonymous]
    public class RemoteValidationController : Controller
    {
        //
        // GET: /Admin/RemoteValidation/

        public ActionResult ValidateNumSiretNumberDigits(long numSiret)
        {
            string s = numSiret.ToString();
            for (int i = 0; i < s.Length; i++)
            {
                if (s.Equals('0'))
                    s.Remove(i);
                else
                {
                    break;
                }
            }
            return Json(s.Count()==15, JsonRequestBehavior.AllowGet);
        }

    }

问题是验证不起作用,当我按下验证按钮时没有任何反应!即使我在 JSon 的返回参数中始终将验证设置为 true,也没有任何反应。我还应该告诉您,验证是从管理区域的创建页面调用的。我怀疑问题出在我包含的 JQuery 插件上,因为我真诚地没有使用 JQuery。谢谢。

【问题讨论】:

    标签: asp.net jquery asp.net-mvc-4 jquery-plugins data-annotations


    【解决方案1】:

    您需要 jquery.validate.js 插件和 jquery.validate.unobtrusive.js 脚本才能使 MVC 客户端验证工作。

    如果您创建了标准 MVC4,那么已经有一个预配置了这些脚本的捆绑包:"~/bundles/jqueryval"

    所以你只需要删除两个http://ajax.aspnetcdn.com... 行(无论如何包含调试和最小版本是没有意义的)并将其替换为以下Scripts.Render 调用:

    @Scripts.Render("~/bundles/jqueryval")
    

    【讨论】:

    • 您如何使用您认为的public long NumSiret?该字段生成的 html 是什么样的?
    • @Html.EditorFor(model => model.NumSiret) @Html.ValidationMessageFor(model => model.NumSiret)
    • 我应该将@Scripts.Render("~/bundles/jquery") 和@Scripts.Render("~/bundles/jqueryval") 都放在母版页中吗?
    • 是的,你可以把它们放在_Layout.cshtml中。你的@Html.EditorForHtml.BeginFrom 块内吗?您的视图是部分视图吗?您是否使用 AJAX 加载它?如果您将生成的 NumSiret 字段的 html 发布出来会很好(在浏览器中单击鼠标右键并查看源代码)...
    • 还要确保上述脚本 jquery.validate.js 插件和 jquery.validate.unobtrusive.js 以 HTML 格式呈现,并且您的浏览器能够加载它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多