奇怪,似乎无法重现该问题:
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
public ActionResult About(string id)
{
return View();
}
}
和里面Index.cshtml
:
@Url.Action("About", "Home")
现在,当我请求/home/index/123
url 助手/home/about
按预期生成时。没有鬼参数。那么你的场景有什么不同呢?
更新:
现在您已经阐明了您的方案,您似乎有以下几点:
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
}
并且在Index.cshtml
您内部尝试使用:
@Url.Action("Index", "Home")
如果您要求/home/index/123
生成/home/index/123
而不是预期的/home/index
(或仅/
考虑默认值)。
此行为是设计使然。如果你想改变它,你将不得不编写你自己的助手来忽略当前的路线数据。以下是它的外观:
@UrlHelper.GenerateUrl(
"Default",
"index",
"home",
null,
Url.RouteCollection,
// That's the important part and it is where we kill the current RouteData
new RequestContext(Html.ViewContext.HttpContext, new RouteData()),
false
)
这将生成您期望的正确 url。当然,这是丑陋的。我建议你将它封装成一个可重用的助手。