这是我的路线
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) 但第二个不使用这些值,我不明白!
答案 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 }
);
如果有人能说我为什么......