我注意到我认为 T4MVC 的一些奇怪行为。具体来说,我正在尝试为可选参数值为 null 的操作构建 ActionLink(使用 HtmlHelper)。这在大多数情况下都可以正常工作。但是,如果当前路由与正在为其构建 ActionLink 的路由相同,并且 OptionalParameter 具有非空值,则生成的 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))
正如我之前提到的,如果我当前不在映射到此路由的视图上,则将正确生成链接。但是,如果当前视图确实映射了 this 路由,并且我要么省略该值,要么提供 null(如 razor 代码片段中所示),lineNumber 参数将从当前路由值中获取其值。
我认为这可能是 T4MVC 中的一个错误,因此我也会在 T4MVC codeplex 站点上发布该主题的链接。提前致谢!