为什么T4MVC中没有常量字符串生成代码?我的猜测是编译时复制常量值...
但是,在生成的代码中添加常量将允许在属性中使用T4MVC生成的东西.
我想这样的事情:
插入@line 400:
public const String ControllerNameCONST = @"<#=controller.ClassName #>";
Run Code Online (Sandbox Code Playgroud)
插入@line 445:
[<#= GeneratedCode #>, DebuggerNonUserCode]
public static class ActionNamesCONST {
<#foreach (var method in controller.ActionMethodsWithUniqueNames) { #>
<# if (UseLowercaseRoutes) { #>
public const string <#=method.ActionName #> = (<#=method.ActionNameValueExpression #>).ToLowerInvariant();
<# } else { #>
public const string <#=method.ActionName #> = <#=method.ActionNameValueExpression #>;
<# }
} #>
}
Run Code Online (Sandbox Code Playgroud)
所以有人可以像这样使用它:
[SomeAttribute(HomeController.ControllerNameCONST)]
//instead of
[SomeAttribute("Home")]
//or
[SomeAttribute(HomeController.ActionNamesCONST.SomeAction)]
//instead of
[SomeAttribute("SomeAction")]
Run Code Online (Sandbox Code Playgroud)
编辑:将其用作模型上的自动完成属性,因此可以在模型上指定"目标"控制器和操作.虽然可以重写autocomplete属性以将ActionResult作为参数而不是控制器+动作名称...
更新(2011年12月7日):此问题现已修复(在2.6.65中).请参见http://mvccontrib.codeplex.com/workitem/7177.
T4MVC确实生成了许多常量.例如
对于控制器名称: MVC.Home.Name
对于动作名称: MVC.Home.ActionNames.About
对于视图名称: MVC.Home.Views.About