2014-09-29 2 views
0

Я пытаюсь передать параметр через url в ASP.NET MVC-контроллер. Я использую пользовательские маршруты в первый раз, и я не уверен, что я что-то упустил.Параметр передачи MVC не работает

Вот URL Я зову:

http://localhost:2053/agent-edit/?id=12 

Вот мой собственный URL:

routes.MapRoute(name: "agent", url: "agent", defaults: new { controller = "Agents", action = "Index" }); 
routes.MapRoute(name: "agent-add", url: "agent-add", defaults: new { controller = "Agents", action = "Add" }); 
routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents", action = "Edit" }); 

и вот мой мой Контроллер илит:

public ActionResult Edit(int id) 
{ 
     bla_Agent Agent = bla_Agent.getSingleAgent(id); 
     return View(Agent); 
} 

я могу перейти к все мои другие url прекрасно, когда я пытаюсь отправить идентификатор, где он, похоже, не работает. Я просто получил ошибку 404, не найденную в Chrome Console. Прежде чем я добавил {id}, я мог бы также перейти к URL-адресу, так что просмотр работает.

Заранее спасибо.

+2

Если вы определили 'агент редактировать/{идентификатор}' в качестве шаблона URL, вы должны называть это так: 'HTTP: // локальный: 2053/агент редактировать/12' –

ответ

0

попробовать последний маршрут как:

routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { 
    controller = "Agents", 
    action = "Edit", 
    id = UrlParameter.Optional 
}); 
0

Если вы хотите назвать свои действия, как: http://localhost:2053/agent-edit/?id=12

, то вы должны изменить последний маршрут:

routes.MapRoute(name: "agent-edit", url: "agent-edit", defaults: new { controller = "Agents", action = "Edit" }); 
0

http://localhost:2053/agent-edit/?id=12 является не работает, потому что он не соответствует шаблону, который вы указали в маршрутах. Поэтому он должен быть как http://localhost:2053/agent-edit/12, так как контроллер ожидает, что идентификатор будет добавлен в конце маршрута. Кроме того, если вы хотите ид быть дополнительно можно использовать:

public ActionResult Edit(int? id){ 
} 
0

как сказал Marc_s в комментариях. Если у вас есть маршрут

routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents", 
action = "Edit" }); 

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

http://localhost:2053/agent-edit/12 

Причиной является 12 будет принято в качестве значений маршрута, а затем он передается на соответствующее действие, которое вы callling в от от контроллера

В вашем случае это

public ActionResult Edit(int id) 
{ 
    bla_Agent Agent = bla_Agent.getSingleAgent(id); 
    return View(Agent); 
} 

так что вам просто нужно назвать его как http://localhost:2053/agent-edit/12

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

http://localhost:2053/agent-edit/12?AgentName=ABC

И ваш контроллер будет

public ActionResult Edit(int id,string AgentName) 
{ 
    bla_Agent Agent = bla_Agent.getSingleAgent(id); 
    return View(Agent); 
} 

Теперь причина, как это работает, они, как вы карта в карте маршрута в маршрутной конфигурации.Маршрут, в котором вы указали в конфигурации маршрута, ожидает {id} в качестве значения маршрута, чтобы он мог быть передан вами как завершающая косая черта. Но в случае AgentName. Его не упоминаются в параметрах значения маршрута. Таким образом, он будет передан как строка запроса с url с ключом ключа querystring. В отличие от значения маршрута, как Id.

Я надеюсь, что это должно быть ясно для вас, чтобы понять

Смежные вопросы