【问题标题】:MVC5 - Data Annotations - Client Side Validation Not Happening?MVC5 - 数据注释 - 客户端验证未发生?
【发布时间】:2015-02-06 12:56:12
【问题描述】:

我有一个 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);
        }
   ...
   ...
}

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

我的 .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>

【问题讨论】:

  • 你的 cshtml 标记是什么? (你的看法……代码是什么)
  • @Ahmedilyas - 我修改了我的帖子以添加标记。
  • @AnthonyShaw - 这不是重复的。我包含了所有的 .js 文件,并且正在进行验证,只是不在浏览器中。
  • 您是否将 web.config appSettings 更改包含在另一个问题的已接受答案中?

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


【解决方案1】:

我发现了我的问题。在我的 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)

一旦我这样做了,它就可以正常工作了。当然,这将导致它为所有页面加载。这可能是不可取的。如果没有,请根据需要在每个页面中单独加载。

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多