Странно, не могу воспроизвести проблему:
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
, генерируется хелпер /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, который вы ожидали.Конечно это некрасиво.Я бы порекомендовал вам заключить его в многоразовый помощник.