2013-08-20 3 views
2

У меня есть 2 раздела на странице. Назовем страницу index.cshtml.MVC 4 - обновить частичные виды

Первый раздел является «критерии поиска», а второй раздел «результаты поиска»

Теперь я создал раздел критерии поиска и раздел результаты поиска, как открывается частичный вид, и добавил кнопку в нижней части index.cshtml, который принимает результаты поиска и вызывает функцию javascript с именем «Поиск».

Эта функция выполняет поиск, то есть принимает критерии поиска и упаковывает его как аргументы в вызов метода jQuery.get ($ .get).

Этот вызов затем считывает ответ от SearchResultsController (SearchCriteria myCriteria) и использует $ .html() для замены результатов поиска в частичном представлении результатов поиска.

Дело в том, что это лучший способ сделать это? Или есть способ на строительных площадках MVC, где я могу это сделать без ручного катания моего собственного javascript или jquery или любого другого клиентского кода - вкус jour.

Все, что я хочу сделать - вы нажимаете кнопку на странице A, берете ввод с частичного представления B, а затем передаете этот вход в хранимую процедуру и обновляете содержимое представления C с результатами процедуры , не требуя полного обновления страницы. Это так просто.

Какие еще способы, требующие минимального ручного проката, могли бы получить частичное обновление? Любые ссылки на код?

ответ

2

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

Таким образом, это кажется распространенным недоразумением для новых разработчиков, работающих с частичными видами. Частичные представления - это просто удобство серверная сторона, предназначенная для совместного использования одинакового кода просмотра между несколькими видами. После того, как ваша страница отобразилась клиенту, тот факт, что вы использовали частичные виды , уже не имеет значения. Если вы хотите что-то обновить на странице без инициирования обновления страницы, вы должны отправить запрос AJAX для извлечения некоторых новых данных (JSON, XML и т. Д.) Или HTML для отображения, а затем, также с JavaScript, использовать этот ответ для сделать что-то другое на странице. Опять же, ничто из этого не имеет ничего общего с частичными представлениями.

+0

Не мог бы сказать это лучше, и, видимо, я не LOL: P – asymptoticFault

+0

Привет Крис, спасибо за ваш ответ. Новый разработчик, которого я не знаю, был в этой игре уже 17 лет;) Позвольте мне пояснить здесь. Я знаю, что у меня могут быть обновления async с использованием javascript, но реальный вопрос был: «Лучше ли использовать * javascript или jquery для обновления частичный вид "или есть другой метод, который я должен попробовать, который не нуждается в клиентском коде? Пример, который я видел в MVC, есть @ ajax.BeginWebForm, но как я могу использовать это, чтобы обновить частичное представление B, когда нажатая кнопка находится на главной странице cshtml? Извините, если это сбивает с толку :) – Scott

+0

Извините. Не значит обидеть. Тем не менее, вы, кажется, все еще боретесь с довольно основными понятиями здесь.Чтобы обновить страницу с новым контентом с сервера, есть две и только две опции: 1) обновить всю страницу с помощью обычного запроса GET или POST или 2) использовать AJAX для извлечения обновлений с сервера, не вызывая обновления страницы , Используемый вами '@ ajax.BeginWebForm' метод использует AJAX для публикации формы, как предлагает пространство имен. Это * клиентский код *. Возможно, вы не пишете его самостоятельно, но он все еще там - добавлен MVC для вас. Для AJAX требуется JavaScript. Просто как тот. –

0

Метод, который вы описали, я считаю лучшим/самым чистым/наиболее эффективным способом обновления ваших результатов и является хорошей реализацией с использованием частичных представлений. Если вы хотите, чтобы обновления были асинхронными, вам нужно будет использовать некоторую форму javascript, но это не должно быть jQuery.