2015-02-10 4 views
-1

У меня есть следующий код:проверки в ASP.NET MVC 5

@using (Html.BeginForm("TestForm", "Home", FormMethod.Post, new { id="form1" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Test</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <input type="text" name="field1" /> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

и следующий JS скрипт:

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/bundles/jqueryui") 
    <script> 

     $(function() { 
      $.validator.addMethod('integer', function (value, element, param) { 
       return (value != 0) && (value == parseInt(value, 10)); 
      }, 'Please enter a non zero integer value!'); 


      $("#form1").validate({ 
        field1: { 
         required: true, 
         integer: true 
        } 

       } 
      }); 
     }); 
    </script> 
} 

проверка FirstName работает, field1 проверки - не работает. Если я удалю эту часть со страницы:

<div class="form-group"> 
     @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

then field1 validation works. Таким образом, «стандартная» проверка противоречит моей проверке. Как его сочетать?

ответ

0

Кроме того, необходимо добавить unobtrusive.adapter в Jquery проверки и включают ассоциированную data-val- атрибут к элементу управления, добавьте добавить ValidationMessageFor(), чтобы отобразить сообщение

Добавьте следующие сценарии

// function to test for integer and not equal to zero 
function isInteger(value) { 
    return (value != 0) && (value == parseInt(value, 10)); 
} 

$.validator.addMethod('integer', function (value, element, params) { 
    return isInteger(value); 
}); 

$.validator.unobtrusive.adapters.add("integer", [], function (options) { 
    options.rules['integer'] = {}; 
    options.messages['integer'] = options.message; 
}); 

И в представлении

@Html.TextBoxFor(m => m.YourInteger, new { data_val_integer = "The field must be an integer and not equal to zero" }) 
@Html.ValidationMessageFor(m => m.YourInteger) 

Чтобы избежать добавления data_val_integer вручную, вы можете создать корка ом помощник, например

public static MvcHtmlString IntegerFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression) 
{ 
    string name = ExpressionHelper.GetExpressionText(expression); 
    string message = string.Format("The field {0} must be an integer and not equal to zero", name); 
    return InputExtensions.TextBoxFor(helper, expression, new { htmlAttributes = new { data_val_integer = message }}) 
} 

, а затем в представлении

@Html.IntegerFor(m => m.YourInteger) 
+0

спасибо, но это не работает. Может быть, нужно добавить метод проверки? –

+0

Это действительно работает, я уже тестировал его (как и другие). Я могу только предположить, что у вас есть другие скрипты, которые мешают (или не удалили скрипты, которые вы отправили в вопросе) –

+0

посмотрите на это http://jsfiddle.net/2VJZT/487/. Что неверно (копия результата html)? –

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