asp.net-mvc – MVC5 – 数据注释 – 客户端验证没有发生?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – MVC5 – 数据注释 – 客户端验证没有发生?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个MVC 5应用程序,我正在使用数据注释来进行大部分验证.我班级中的一个属性如下所示:
[required(ErrorMessage = "Please enter a business name")]
[StringLength(80)]
public string BusinessName { get; set; }

验证工作正常,但它似乎并没有像我认为的那样在浏览器中发生.在我的页面上,我有一个保存按钮.如果我将“业务名称”字段留空并单击“保存”,则会对控制器方法发布一个帖子,该方法部分地查看,如下所示:

[HttpPost]
    public ActionResult Create(Advertiser advertiser,FormCollection collection,HttpPostedFileBase file)
    {
        // Before we do anything,let's check to make sure any validation that's already been done is clean.
        if (!ModelState.IsValid)
        {
            return View(advertiser);
        }
   ...
   ...
}

执行此方法时,模型状态已设置为无效.这很好,因为它是无效的,因为商家名称字段为空.但是,不应该在客户端进行此验证吗?

我的.cshtml文件中的字段如下所示(使用Bootstrap):

<div class="form-group">
    @Html.Label("Business Name",new { @class = "control-label col-md-3" })
    <div class="col-md-9">
        @Html.TextBoxFor(model => model.BusinessName,new { @class = "form-control",title = "",autofocus = true })
        @Html.ValidationMessageFor(model => model.BusinessName)
    </div>
</div>

我的Web.Config设置正确如下:

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

解决方法

我发现了我的问题.在我的BundleConfig.cs中,我有以下内容
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.min.js","~/Scripts/jquery-ui-1.10.4.min.js","~/Scripts/jquery.base64.js"
                ));

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                "~/Scripts/jquery.validate.min.js","~/Scripts/jquery.validate.unobtrusive.min.js"
                ));

但是,我没有意识到,默认情况下,jqueryval包不会被加载到_Layout.cshtml文件中.所以我需要添加它,如下所示:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts",required: false)

一旦我这样做了,它就是应该的.当然,这将导致它被加载到所有页面.这可能并不可取.如果没有,请根据需要在每个页面中单独加载.

猜你在找的asp.Net相关文章