为什么我的链接没有当前路由值?

时间:2014-09-11 13:04:41

标签: c# asp.net-mvc

这是我的路线

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

     

/测试/索引2

第一个链接正常,因为它使用当前路由值(lg = EN和testId = 1) 但第二个不使用这些值,我不明白!

2 个答案:

答案 0 :(得分:0)

老实说,我不会期望第一个链接有路由值。也许视图引擎足够聪明,知道它链接到当前路由并自动填充它们?

无论如何,链接到完全不同的东西并不会默认填充路线值。该框架没有理由相信这些路线值适用于完全不同的行为。

明确指定:

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

答案 1 :(得分:0)

我找到了一个解决方法:路由参数必须在操作之前! :

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

如果有人能说我为什么......