Кнопка отправки HTML и запись на основе AJAX (ASP.NET MVC) - PullRequest
5 голосов
/ 02 апреля 2010

Мне нужен совет по дизайну.

Я работаю над приложением с таким же разработчиком. Я из мира Webforms, и он много сделал с JQuery и AJAX. Мы сотрудничаем над новым приложением ASP.MVC 1.0.

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

но ...

Он редко использует кнопки Отправить, тогда как я использую их большую часть времени. Он использует кнопку, но затем присоединяет к ней Javascript, который вызывает действие MVC, которое возвращает объект JSON. Затем он анализирует объект, чтобы обновить сетку данных. Я не уверен, как он справляется с проверкой на стороне сервера - я думаю, что он добавляет свойство сообщения к объекту JSON. Пример сценария: «Сохранить» новую запись, которая затем добавляется в сетку.

Пользователь не видит постбэк как таковой, поэтому он использует jQuery для отключения пользовательского интерфейса во время выполнения действия контроллера.

ТБХ, это выглядит довольно круто.

Тем не менее, я бы использовал кнопку Submit для отправки назад, позволил ModelBinder заполнить типизированный класс модели, проанализировал, что в моем методе Action контроллера, обновил модель (и применил любую проверку к модели. ), обновите его новой записью, а затем отправьте обратно для визуализации представлением. В отличие от него, я не возвращаю объект JSON, я позволяю View (и сетке данных) привязываться к новым данным модели.

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

Хотя я бы предпочел, чтобы мы применили «отраслевой стандарт» способ сделать это. Я не уверен, влияет ли мой опыт работы с WebForms на тот факт, что его способ просто «не выглядит правильным», поскольку «отправка» предназначена для отправки данных на сервер.

Любой совет, пожалуйста - большое спасибо.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2010

Вы должны принять во внимание, как будет работать приложение, если javascript недоступен. Вы должны стремиться к тому, чтобы основной функционал работал без него. Это называется прогрессивным улучшением или ненавязчивым javascript и считается лучшей практикой.

http://en.wikipedia.org/wiki/Progressive_enhancement

Способ, которым вы должны это сделать, - это использовать форму с реальной кнопкой отправки, а затем перехватить эту форму, чтобы использовать ajax, если его поддерживает пользовательский агент. Обычно это довольно тривиально, используя плагин jquery forms. В вашем методе действия вы можете проверить, является ли входящий запрос ajax-запросом, проверив свойство Request.IsAjaxRequest. MVC автоматически устанавливает это для запросов, для заголовка X-Requested-With которых установлено значение XMLHttpRequest. Тогда вы бы вернули полный просмотр или просто какой-то JSON на основе этого.

Вот короткий скринкаст, демонстрирующий это: http://www.youtube.com/watch?v=YQsFR1rkgMU&feature=player_embedded

3 голосов
/ 02 апреля 2010

Оба решения являются жизнеспособными, хотя использование кнопок отправки сделает ваше приложение более доступным (т. Е. Для его использования не потребуется JavaScript).

Вы также можете сделать и то и другое - начать со страницы, которая имеет всю необходимую логику, используя обратные ссылки, и «обновить» ее красивыми AJAX-y-запросами и анимацией. Таким образом, пользователи с JavaScript получат конфетку, и страница будет изящно ухудшать , когда пользователь без JavaScript посещает страницу, возвращаясь к механизму обратной передачи.

...