Использование Knockoutjs и проверки на стороне сервера в .NET MVC2 - PullRequest
7 голосов
/ 01 февраля 2012

Я использую MVC2.

Каков рекомендуемый способ проверки форм на стороне сервера при использовании нокаута?

В настоящее время большинство моих форм являются частичнымипредставления, которые имеют C # ViewModel с атрибутами проверки.Примерно так:

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

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

Итак, когда форма отправляется на сервер, я получаю все ошибки модели и могу вернуть форму с ошибками, которые отображаются с чем-то вроде: <%: <code>Html.ValidationMessageFor(m => m.Name)%>.Затем он загружается в элемент, который содержит форму на главной странице, чтобы пользователь мог видеть ошибки.Это убило бы любые привязки, которые у меня были с формой в нокауте, я бы предположил.

Я не совсем уверен, как это сделать с помощью нокаута.

1 Ответ

4 голосов
/ 01 февраля 2012

Это может быть сложно, но все сделано правильно, работает как ветер.

Во-первых, синхронизируйте ваши модели просмотра.То, что у вас есть на стороне клиента в нокауте, вы передаете именно на сервер.Во-вторых, не выполняет серверный HTML с нокаутом .Создайте поля, которые установлены на стороне сервера, и прочитайте на стороне клиента, которые указывают на действительность каждого поля данных в вашей ViewModel.

Так что, если ваша Модель имеет поле Name, ваша ViewModel имеет Name и Name_ValidationResult, который является перечислением, которое указывает, является ли поле Имя действительным и почему это не так.Если проверка на стороне сервера не удалась, задайте поля результатов проверки и передайте всю ViewModel на стороне сервера обратно клиенту, чтобы после завершения запроса он был переустановлен как ViewModel на стороне клиента.По сути, вы заново создаете часть ViewState в ASP.NET, но делаете это в формате, который будет работать с Knockout.js

На стороне клиента у вас есть сообщения об ошибках, которые отображаются только на основе значенийValidationResult полей.Таким образом, у вас может появиться постоянное сообщение об ошибке, в котором говорится «Поле имени должно быть установлено», которое отображается, только если Name_ValidationResult имеет значение «Пусто» (например).

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

Итак, вы предлагаете мне добавить поля ValidationResult в C # ViewModel для каждого свойства.Затем установите свойства ValidationResult в моем контроллере, когда я проверяю достоверность модели.Затем передать модель представления как JSON?так что я могу обновить свою нокаут-модель.Это потребует от меня ручной проверки в некоторой степени, верно?Или я могу использовать ошибки ModelState, с которыми я столкнусь?- Blankasaurus

Итог - да на все ваши вопросы.

По правде говоря, я упустил тот факт, что вы использовали аннотации данных для проверки, или я бы упомянул об этом.Вы должны быть в состоянии использовать ошибки ModelState, чтобы установить результаты проверки, которые вы передадите обратно на свою страницу нокаута.

Проблема в том, что вы используете две принципиально несовместимые технологии и надеетесь, что они будут хорошо играть вместе, и я не думаю, что это сработает так, как вы надеетесь.Что-то придется дать, и я полагаю, что лучший момент для этого - на стороне сервера.Выпей нокаутирующую помощь и исправь то, что у тебя есть на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...