Asp.Net MVC маршрутизация различий в www.Mysite.com/Employee и www.Mysite.com/Employee/ при использовании JqGrid - PullRequest
0 голосов
/ 13 сентября 2009

Я использую ASP.NEt MVC для одного из моих проектов. В этом у меня есть контроллер Employee, который можно вызвать по www.Mysite.com / Employee / url.

Также я использовал JqGrid, который использует followng для извлечения данных

url: "GetGridData"

Тестируя то же самое, я обнаружил, что

  1. Если я наберу www.Mysite.com/Employee/ в браузере, вызов будет

    www.Mysite.com / Employee / GetGridData

  2. Если я наберу www.Mysite.com/Employee в браузере, будет сделан вызов

    www.Mysite.com / GetGridData

Примечание: отсутствует / в конце второго вызова.

Как исправить это, поскольку есть вероятность, что конечный пользователь может ввести любой из этих URL в браузере.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

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

Выход на улицу из MVC на минуту, если у меня есть страница:

example.com / page1.aspx

И там есть относительная ссылка на другую страницу:

<a href="page2.aspx">Click here</a>

Браузер будет искать page2.aspx на том же уровне, что и page1.aspx, т.е.

example.com / page2.aspx

Если я переместить страницу 1 в новую папку:

example.com / NewFolder / page1.aspx

Браузер запросит

example.com / NewFolder / page2.aspx

когда пользователь нажимает на ссылку.

То же самое происходит с вашим вызовом GetGridData - они выполняются веб-браузером на вашем сервере на основе имеющейся у него информации.

Итак, если ваша страница отвечает:

example.com / Employee

И запрашивает относительный запрос:

GetGridData

Браузер отправит этот запрос на тот же уровень, на котором, по-видимому, находится Сотрудник:

example.com / GetGriddata

Что не получается, потому что механизм маршрутизации не может найти маршрут для этого запроса.

Вы должны посмотреть на динамическое создание URL-адреса для вызова GetGridData через систему маршрутизации, которая будет гарантировать, что он построен как:

url: "/Employee/GetGridData"

Окончательное редактирование для добавления

Забыл упомянуть, вы должны использовать UrlHelper Action методы для этого:

url: <%=Url.Action("GetGridData")%>

Это создаст путь к методу GetGridData на текущем контроллере. Если вам нужно получить доступ к другому контроллеру или передать некоторые значения, существуют перегрузки, которые помогут.

0 голосов
/ 13 сентября 2009

Попробуйте отладить ваш маршрут: Фил Хаак: отладчик маршрутизации ASP.NET

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