2014-09-11 2 views
0

Вот мой маршрутПочему у моей ссылки нет текущих значений маршрута?

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

Вот мой код контроллера

public class TestController : Controller 
{ 
    // 
    // GET: /Test/ 

    public ActionResult Index(int testId,string lg) 
    { 
     return View(); 
    } 

    public ActionResult Index2(int testId, string lg) 
    { 
     return View(); 
    } 

} 

Вот мой код представления (Index.cshtml)

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
@Url.Action("Index")<br/> 

@Url.Action("Index2") 

Когда я открываю «/ Test/INDEX/1/EN "

Это дает мне

/Test/Index/1/EN

/Тест/index2

Первое звено в порядке, потому что он использует текущее значение маршрута (Л.Г. = EN и TestID = 1) Но второй не использует значения, я не понимаю!

ответ

0

Я бы не ожидал, что первая ссылка будет иметь значения маршрута, честно говоря. Может быть, механизм просмотра достаточно умен, чтобы знать, что он связан с текущим маршрутом и автоматически заполняет их?

В любом случае ссылка на нечто совершенно другое не будет заполнять значения маршрута по умолчанию. У рамки нет оснований полагать, что эти значения маршрута применимы к совершенно другим действиям.

Укажите их в явном виде:

@Url.Action("Index2", new { testId = 1, lg = "EN" }) 
+0

По дизайну он добавляет текущие значения маршрута –

0

Я нашел обходной путь: параметры маршрута должны быть перед действием! :

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

Если кто-то может сказать мне, почему ...

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