T4MVCの奇妙な振る舞いであると私が信じていることに気づきました。具体的には、オプションのパラメーター値がnullであるアクションのActionLinkを(HtmlHelperを使用して)構築しようとしています。これはほとんどの場合正常に機能します。ただし、現在のルートがActionLinkが構築されているルートと同じであり、OptionalParameterの値がnull以外の場合、結果のActionLinkは、現在のルートコンテキストからのオプションのパラメーターの値を指定します。
それは一言で言えば、コードが明確にするのに役立つと思います。
コントローラ
public virtual ActionResult Today(int? lineNumber = null)
{
return Index(DateTime.Today, DateTime.Today, lineNumber);
}
ルート
context.MapRoute(
"TodaysProductionSchedules",
"Production/{Controller}/Today/{lineNumber}",
new
{
area = AreaName,
controller = MVC.Production.ProductionSchedules.Name,
action = MVC.Production.ProductionSchedules.ActionNames.Today,
lineNumber = UrlParameter.Optional
});
かみそり
@Html.ActionLink("Show Today", MVC.Production.ProductionSchedules.Today(null))
前述したように、現在このルートにマップされているビューを表示していない場合、リンクは正しく生成されます。ただし、現在のビューがこのルートをマップし、値を省略するかnullを指定した場合(かみそりのスニペットに表示されるように)、lineNumberパラメーターは現在のルート値からその値を取得します。
これはT4MVCのバグである可能性があると思うので、このトピックへのリンクをT4MVCコードプレックスサイトにも投稿します。前もって感謝します!