Ответ 1
Странно, похоже, не может воспроизвести проблему:
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
, как ожидалось. Нет параметров призрака. Итак, как ваш сценарий отличается?
UPDATE:
Теперь, когда вы уточнили свой сценарий, кажется, что у вас есть следующее:
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 the important part and it is where we kill the current RouteData
new RequestContext(Html.ViewContext.HttpContext, new RouteData()),
false
)
Это создаст правильный URL-адрес, который вы ожидали. Конечно, это уродливо. Я бы рекомендовал вам инкапсулировать его в помощника многократного использования.