2010-05-06 1 views
2

У меня есть ссылка действия в одном из моего просмотра страницыUrl предложение маршрутизации в ASP.NET MVC

<%=Html.ActionLink("Details", "Details", new { id = Model.Id })%> и перенаправляет меня на страницу, которая имеет URL, как этот http://localhost:1985/Materials/Details/2 вместо этого я хотел бы, чтобы мой адрес, как http://localhost:1985/Materials/Details/steel название материала вместо Id ... возможно ли это ...... Это мой метод действия контроллера,

public ActionResult Details(int id) 
    { 
     var material = consRepository.GetMaterial(id); 
     return View("Details", material); 
    } 

EDIT: Я перебор моего объект JSON вернулся из контроллера JsonResult .. ..

$.each(data.Results, function() { 
      divs += '<a href="/Materials/Details/' + this.Id + '">Details</a> 
      &nbsp;<a href="/Materials/Edit/' + this.Id + '">Edit</a></div>'; 
      }); 

Мой маршрут выглядеть следующим образом,

routes.MapRoute(
       "Default",           
       "{controller}/{action}/{id}",       
       new { controller = "Materials", action = "Index", id = "" } 
      ); 

ответ

2

Я бы рекомендовал, что ваш URL будет

http://localhost:1985/Materials/Details/2/Steel 

Это кажется так, что SO показывает их URL, а также.

Ваши маршруты будут определены как

routes.MapRoute(
    "action with slug", 
    "{controller}/{action}/{id}/{slug}", 
    new {controller = "Error", action = "NotFound", id = "", slug = ""} 
); 

routes.MapRoute(
    "Default",           
    "{controller}/{action}/{id}",       
    new { controller = "Materials", action = "Index", id = "" } 
); 

В ответ на 2-й вопрос в комментариях, «Как удалить детали из ссылки?» Если вы хотите удалить имя ACTION, так что URL-адрес равен http://site/controler/id/slug, добавьте следующий маршрут ПЕРЕД вызовом с путём.

routes.MapRoute(
    "controller with slug", 
    "Materials/{id}/{slug}", 
    new {controller = "Materials", action = "Details", id = "", slug = ""} 
); 

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

ссылку Создать маршрут вместо ссылки на действия, как этот

<%= Html.RouteLink(material.Name, 
     "show with slug", 
     new { controller = "Materials", 
      action = "Details", 
      id = material.Id, 
      slug = Server.HtmlDecode(material.Name).Replace(" ","-") 
     }) 
%> 

я заменить пробелы в моей «слизняк с дефисом, чтобы они не заменяются на% 20 с помощью браузера.

Ваши данные ActionResult не изменится.

+0

@ jason определенно попробует это .... –

+0

@jason Я повторяю данные json с jquery и добавляю ссылку на детали через jquery ..... Вот что я использую 'Details', но это не похоже на работа ... –

+0

@jason, но если я использую 'Details, это работает, и я перенаправлен' http: // localhost: 1985/Materials/Details/2' –