2014-02-14 4 views
1

Как мне получить MVC4/JQuery Validate для применения проверки на свойства с нулевым значением?MVC4 JQuery validate не проверяет необязательные поля

Например, есть 2 числовые свойства в модели:

[Required] 
    public int Counter { get; set; } 

    public int? CounterNonRequired { get; set; } 

И этот Razor код:

<div class="editor-field"> 
    @Html.EditorFor(model => model.Counter) 
    @Html.ValidationMessageFor(model => model.Counter) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.CounterNonRequired) 
    @Html.ValidationMessageFor(model => model.CounterNonRequired) 
</div> 

Это производит следующий HTML:

<div class="editor-field"> 
    <input class="text-box single-line" 
      data-val="true" 
      data-val-number="The field Counter must be a number." 
      data-val-required="The Counter field is required." 
      id="Counter" 
      name="Counter" 
      type="number" 
      value=""> 
    <span class="field-validation-valid" 
      data-valmsg-for="Counter" 
      data-valmsg-replace="true"> 
    </span> 
</div> 
<div class="editor-field"> 
    <input class="text-box single-line valid" 
      data-val="true" 
      data-val-number="The field CounterNonRequired must be a number." 
      id="CounterNonRequired" 
      name="CounterNonRequired" 
      type="number" 
      value=""> 
    <span class="field-validation-valid" 
      data-valmsg-for="CounterNonRequired" 
      data-valmsg-replace="true"> 
    </span> 
</div> 

Редактор CounterNonRequired должен подтвердить, что могут вводиться только цифры, но вместо этого они допускают буквы e tc. Редактор счетчика запрещает ввод букв.

Я также попытался использовать регулярное выражение для проверки необязательного поля, но это было проигнорировано так же, как проверка числа.

Любые мысли?

ответ

0

Попробуйте, как это,

Посмотреть

@using (Html.BeginForm("Page", "Controller", FormMethod.Post, new { id = "FrmIndex" })) 
{ 
    <div> 
     @Html.TextBoxFor(model => model.Counter) 
     @Html.ValidationMessageFor(model => model.Counter) 
    </div> 
    <div> 
     @Html.LabelFor(m => m.CounterNonRequired) 
     @Html.EditorFor(m => m.CounterNonRequired) 
     @Html.ValidationMessageFor(m => m.CounterNonRequired) 
    </div> 
    <input type="submit" value="Save" style="float: left;" id="btnSave" title="btn" name="ButtonType" /> 
} 

Модель

public class RegisterModel 
{ 
    [Required] 
    public int Counter { get; set; } 

    public int? CounterNonRequired { get; set; } 
} 

Script использование в View

<script src="~/Script/Jquery-1.8.1.min.js" type="text/javascript"></script> 
<script src="@Url.Content("~/Script/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Script/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

И это не позволит письмо в CounterNonRequired текстовом поле и при вводе буквы в текстовом поле он сгореть сообщение как The field CounterNonRequired must be a number.

+0

Я использую JQuery 1.8.2, который был включен в шаблон MVC. Я вернулся к 1.8.1, как в вашем примере, и он все еще не работает. Какую версию jquery.validate вы используете? – ChaoticNadirs

+0

@ChaoticNadirs Версия 1.8.0 – Jaimin

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