2015-02-06 58 views
7

我有一个MVC 5应用程序,我使用数据注释来做大部分验证。一个在我的类中的属性看起来是这样的:MVC5 - 数据注释 - 客户端验证没有发生?

[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文件中的字段如下所示(使用引导程序):

<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> 
+0

什么是您的cshtml标记? (你的看法...什么是代码) – 2015-02-06 12:57:28

+0

@Ahmedilyas - 我修改了我的帖子以添加标记。的[MVC3客户端验证不工作] – 2015-02-06 12:59:18

+0

可能重复(http://stackoverflow.com/questions/4706174/mvc3-client-side-validation-not-working) – 2015-02-06 13:01:46

回答

10

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

一旦我这样做了,它就像它应该那样工作。当然,这会导致它为所有页面加载。这可能并不理想。如果不是,则根据需要在每个页面中分别加载它。