奇妙なことに、問題を再現できないようです:
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 が生成されます。もちろん、これは醜いです。再利用可能なヘルパーにカプセル化することをお勧めします。