2015-02-06 2 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 файл выглядит следующим образом (используя 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> 
+0

Какова ваша разметка cshtml? (ваш взгляд ... что такое код) –

+0

@Ahmedilyas - Я изменил свой пост, чтобы добавить разметку. –

+0

Возможный дубликат [MVC3 Проверка на стороне клиента не работает] (http://stackoverflow.com/questions/4706174/mvc3-client-side-validation-not-working) –

ответ

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) 

Как только я это сделал, он работает так, как должен. Конечно, это заставит его загрузиться для всех страниц. Это может быть нежелательно. Если нет, загрузите его отдельно на каждой странице по мере необходимости.

Смежные вопросы