MVC: захватить URL-адреса маршрутов и передать их в функцию JavaScript - PullRequest
1 голос
/ 02 февраля 2010

Short:
Есть ли способ получить определение маршрута, которое передаст строковое значение «CONTROLLER / ACTION» в функцию JavaScript вместо фактического перехода к действию контроллера

Подробнее:
У меня есть главная страница, которая содержит навигацию по сайту. Теперь все страницы нуждаются в том, чтобы эта навигация была обернута вокруг нее всегда, но поскольку я не хотел, чтобы навигация постоянно загружалась при каждом вызове страницы, я изменил все свои страницы на частичные просмотры. Эти частичные представления загружаются с помощью метода JQuery.Load () при каждом щелчке по элементу меню в навигации.

Все это работало очень хорошо, до сих пор, потому что я заметил, что это также требование к веб-сайту, чтобы иметь возможность напрямую ссылаться на страницу X, а не default.aspx.

Итак, в качестве примера:
Главная страница - это моя страница "default.aspx", здесь используется моя главная страница с навигацией по ней. И каждый вызов новой страницы использует функцию javascript, которая загружает это частичное представление в div, который известен на моей главной странице. Таким образом, URL-адрес никогда не меняется от «default.aspx», но мой контент меняется просто.

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

(надеюсь, я объяснил это достаточно хорошо, если нет, не стесняйтесь спрашивать больше информации)

Ответы [ 4 ]

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

Вы на 100% правы, если не хотите жестко кодировать свои URL-адреса в своем коде javascript, поскольку это сносит одного из основных арендаторов MVC. Я один из тех парней с разделением интересов, которые не будут писать ни одной строки javascript вне выделенного файла .js, поэтому я не могу динамически указать URL, как это делает tuanvt. Я использую метод MVC Url.Action, чтобы отправлять URL-адреса моих служб в скрытые входные данные на главной странице (или на конкретной странице, если она не используется в нескольких местах). Затем мой файл сценария просто извлекает значение из этого скрытого ввода и прекрасно его использует.

ASP.NET MVC View Source

<input id="serviceUrl" type="hidden" value="<%= Url.Action("Action", "Controller") %>" />

JS Source

$.getJSON($("#serviceUrl").val(), function(data) {
    //write your JS success code here to parse the data
});
0 голосов
/ 02 февраля 2010

Первая проблема: поскольку вы используете AJAX для загрузки частичных страниц, вам нужны доступные клиенту URL-адреса для вызова JavaScript. Во-вторых, вам нужны URL, которые загрузят HomeController и передадут часть «страницы» URL в javascript.

Для первого аспекта я бы создал несколько абстрактных маршрутов, то есть "/ ajaxaccess / {controller} / {action} / {id}" для частичных страниц. Это будет первый зарегистрированный маршрут. Второй маршрут будет принимать любую ссылку на контроллер / действие и всегда обрабатываться действием индекса HomeController.

В действии / Home / Index вы берете запрошенный URL-адрес и нарезаете его, берете раздел / {controller} / {action} / ... и передаете его в ваш default.aspx с помощью TempData. На вашей странице проверьте наличие TempData и, если он существует, используйте значение в нем, чтобы инициировать загрузку вашей страницы AJAX для частичной страницы (не забывайте, что вам нужно добавить «/ ajaxaccess» (или что-то другое) на URL, прежде чем он будет передан на вашу страницу.

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

0 голосов
/ 02 февраля 2010

Вы можете сделать что-то вроде этого, поместите это в свой код JavaScript на виде:

var szUrl=<%= ViewContext.RouteData.Route.ToString()%>;

Тогда текущий маршрут будет сохранен в переменной szUrl.

0 голосов
/ 02 февраля 2010

Вы можете использовать хеш-якорь (#) в вашем URL и читать его с помощью JavaScript.

var url = document.location.toString();
if (url.match('#')) {
  anchor = url.split('#');
  // do whatever with anchor[1] .. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...