2015-10-21 2 views
0
public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Letter", 
      url: "{Home}/{Letter}/{ListId}", 
      defaults: new { controller = "Home", action = "Letter", ListId=1}        
     ); 

     routes.MapRoute(
      name: "words", 
      url: "{Home}/{words}/{WListId}", 
      defaults: new { controller = "Home", action = "words", WListId ="w1" } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id=  UrlParameter.Optional } 
     ); 
    } 

cshtml:Как дать несколько маршрутов в route.config файле

@Html.ActionLink("Home", "Index", "Home") 
@Html.ActionLink("Letter", "Letter/1", "Home") 
@Html.ActionLink("Words", "words/w1", "Home") 

Я делаю это в route.config и .cshtml соответственно, но каждый раз, когда он перенаправляет меня на страницу письма, даже когда я нажимаю «слова» или «дом». Когда я нажимаю слова или дома, он меняет URL-адрес, но не меняет вид. Может ли кто-нибудь предложить, как указать маршрут в файле route.config? Что случилось с этим кодом?

+0

Поскольку вы первый маршрут соответствует всем введенным вами значениям (вы также можете удалить первые 2). Если вам нужен конкретный маршрут для 'Letter', где вы используете метод public PublicResult Letter (int ListId), тогда он должен быть« url: »Home/Letter/{ListId},' - no '{' and '} 'вокруг контроллера и действия, а затем его' @ Html.ActionLink («Letter», «Letter», «Home», new {ListId = 1}, null) ' –

ответ

1

Я полностью переделываю это, потому что я думаю, что теперь я вижу то, что вы пытаетесь сделать.

ActionLink Работает как помощник, чтобы сделать анкерный элемент. Таким образом, используя

@Html.ActionLink("Link", "Action", "Controller") 

помощник, ваша страница делает что-то в виде:

<a href="/Controller/Action">Link</a> 

То, что вы хотите, то, чтобы написать соответствующий контроллер и действия значения - вам не нужны маршруты для этого , Поэтому для того, чтобы произвести ссылку Home/words/1, вы можете использовать ActionLink помощника (только с маршрутом по умолчанию), как это:

@Html.ActionLink("Words", "Words", "Home", new { WListId = "w1" }) 

Это будет производить:

/Home/Words/w1 

и в вашем HomeController.cs, ваш действие должно выглядеть следующим образом:

public ActionResult Words(string WListId) 
{ 
    // whatever you want to do with WListId 

    return View(); 
} 

и ваш взгляд должен быть назван Words.cshtml

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

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id=UrlParameter.Optional }); 
+0

его не работает .., все еще показывающий тот же вид на каждый страница. и я должен переделать конкретный идентификатор слов, т.е. слов/w1. – dania

+0

Хорошо, я думаю, что получил то, что вы просили, и изменил ответ. Попробуй это. –

+0

Несколько ошибок здесь - это должно быть '@ Html.ActionLink (« Слова »,« Слова »,« Домой », новый {WListId =" w1 "}, null)' и он не будет создавать '/ Главная/Слова/w1' - он будет генерировать '/ Home/Words? WListId = w1', если вы не добавите определенный маршрут с помощью' .../{WListId} '(или измените метод на' public ActionResult Words (string id) ' –

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