Это может быть сложно, но все сделано правильно, работает как ветер.
Во-первых, синхронизируйте ваши модели просмотра.То, что у вас есть на стороне клиента в нокауте, вы передаете именно на сервер.Во-вторых, не выполняет серверный 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, чтобы установить результаты проверки, которые вы передадите обратно на свою страницу нокаута.
Проблема в том, что вы используете две принципиально несовместимые технологии и надеетесь, что они будут хорошо играть вместе, и я не думаю, что это сработает так, как вы надеетесь.Что-то придется дать, и я полагаю, что лучший момент для этого - на стороне сервера.Выпей нокаутирующую помощь и исправь то, что у тебя есть на стороне сервера.