Нокаут + MVC 3 + Валидация - PullRequest
44 голосов
/ 21 апреля 2011

В контроллере я хотел бы иметь возможность получить клиентские правила проверки модели. Я прикрепил некоторые атрибуты, используя аннотации данных, и хотел бы иметь возможность передавать что-то клиенту с помощью вызова ajax, чтобы затем я мог автоматически создавать параметры проверки jquery.

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

Не обращая внимания на модель сервера, я немного не уверен, как этого добиться.

Ответы [ 4 ]

26 голосов
/ 03 июля 2011

В моем Mvc Controls Toolkit я разработал помощников на основе библиотеки нокаута. Эти помощники не только помогают в написании нокаутирующего кода, но и расширяют библиотеку нокаутов с помощью ненавязчивой проверки и глобализации. Кроме того, механизм привязки расширен и включает в себя сложные элементы управления, такие как DatetimePicker и другие «сложные» (созданные различными частями html) элементы управления.

Наконец, шаблоны нокаута можно определить с помощью помощников Razor.

См. Документацию здесь , здесь , здесь и здесь . У меня также есть несколько учебных пособий, которые показывают, как реализовать расширенные функции с моими помощниками:

Передачи с низкой шириной полосы пропускания с помощью клиентских шаблонов набора инструментов управления Mvc

Обработка больших объемов данных с помощью шаблонов на стороне клиента

Обработка больших объемов данных с помощью шаблонов на стороне клиента 2

1 голос
/ 09 ноября 2015

В зависимости от того, что именно вам нужно сделать, Breeze js может быть лучшим решением.в частности, если вы используете EF, вы можете реплицировать большую часть функциональности серверного EF DbContext на стороне клиента, включая, конечно, проверку, но также отслеживание изменений, .saveChanges, простой синтаксис, который напоминаетLINQ-запросы, кэширование, сериализация и десериализация, позволяющие работать в автономном режиме, и многое другое.

Основные шаги для работы с Breeze js:

  • создание модели EF на сервере
  • добавить пакет NuGet на сервер, чтобы создать службы Web API, которые предоставляют модель клиентской стороне.Это сделано с удивительно низким количеством кода C #.Одна из вещей, которую это делает, - это предоставление метаданных: определение объектов, отношений и дополнительная информация, такая как информация о проверке аннотаций данных
  • добавляет пакет Nuget js для клиентской стороны, который будет использоваться для репликации EFповедение на стороне клиента.

Конечно, не все функции на сервере будут реплицироваться на клиенте, но вы можете сделать много вещей:

  • создавать новые объекты на стороне клиента
  • создавать запросы на стороне клиента, которые будут выполняться на сервере и возвращаться клиенту
  • изменять объекты на клиенте: создавать, изменять, удалять...
  • создание отношений на стороне клиента: например, создание новых сущностей chlid в родительском объекте
  • вызов saveChanges на стороне клиента, который будет передавать все отслеженные изменения всервер, так что бэкэнд обновляется
  • , конечно, пока вы делаете это, вы получите автоматическую проверку клиента, а также дополнительный серверпроверка всякий раз, когда вы вызываете .saveChanges

Наконец, вы можете расширить и изменить код сервера, включив в него некоторую бизнес-логику, так что вы можете сделать гораздо больше, чем просто представить клиенту модель EF.

0 голосов
/ 08 августа 2013

В модели используйте атрибуты проверки, которые вам нравятся:

 public class ModelWithValidation
 {
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }
 }

В формах mvc

@using( Html.BeginForm())
{    
     @Html.TextBoxFor(m => m.Name, new {data_bind = "value: name"})
     @Html.ValidationMessageFor(m => m.Name)
}

В тесте jQuery, если форма действительна на SubSubmit или в функции сохранения с выбыванием, вызовите следующуюкод для подтверждения ввода.Вы должны включить библиотеки jQuery.unobtrusive * и jQuery.validate *.Не забудьте проверить входные данные и на стороне сервера!

var form = $("form");
form.removeData('validator');
form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse(form);

$("form").valid() //true false 
0 голосов
/ 21 апреля 2011

Это довольно сложная задача. Вы хотите иметь возможность конвертировать свой код C # в Javascript с соответствующими преобразованиями типов данных и т. Д. Вам будет лучше записать два отдельных набора валидации на стороне сервера и клиента. Было бы намного проще поддерживать это, чем писать собственную структуру преобразования самостоятельно и поддерживать ее

...