2013-03-14 3 views
3

Я работаю с MVC 4 в первый раз. У меня есть бизнес-логика, которая немного сложна, но я бы не представлял, что это не редкость. У меня есть элементы, которые могут быть изменены в определенном диапазоне. Диапазон зависит от предмета.Как добавить пользовательскую проверку на страницу Razor?

public class MyItem 
{ 
    public double Width { get; set; } 

    public double MinWidth { get; set; } 

    public double MaxWidth { get; set; } 
} 

CustomWidth при установке пользователя должен быть в пределах MinWidth и MaxWidth включительно. Это похоже на общую проблему. Я пробовал атрибут CustomValidation, но он проверяет только, когда я пытаюсь сохранить объект в моей базе данных (используя Entity Framework).

Это страница Razor, с которой я работаю.

@using (Html.BeginForm("Action", "Controller", FormMethod.Post)) { 
<aside id="aside"> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Width) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Width) 
     @Html.ValidationMessageFor(model => model.Width) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Height) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Height) 
     @Html.ValidationMessageFor(model => model.Height) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Depth) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Depth) 
     @Html.ValidationMessageFor(model => model.Depth) 
    </div> 

    <input type="submit" value="save" /> 
</aside> 
} 
+0

Это будет работать, но я не хочу, чтобы соединить мой слой данных, которые близко к MVC. – Jordan

+0

Он не будет связывать ui с datalayer, если вы использовали модель представления –

+0

Точка хорошо взята, но она все равно будет сочетать валидацию с моделью просмотра слишком много для удобства. Я не понимал, что возвращение модели после того, как сообщение будет сообщать об ошибках. Я уже собрал это благодаря @mrcolombo. – Jordan

ответ

5

Чтобы сделать пользовательскую проверку, вы хотите, чтобы наследовать от IValidatableObject.

** Примечание пользовательские проверки будет происходить после первоначальной проверки модель успешна

public class MyItem : IValidatableObject 
     { 
      public double Width { get; set; } 

      public double MinWidth { get; set; } 

      public double MaxWidth { get; set; } 
      public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
      { 
       // Custom validation 
      } 

} 

Example on how to use

+0

Работает ли это с Razor в JavaScript? – Jordan

+1

NM, я просто собрал всю вещь 'ModelState.IsValid'. Мне больше не нужен javascript stinkin. Благодарю. :) – Jordan

+0

рад помочь :) – mrcolombo

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