4

为什么 T4MVC 生成的代码中没有常量字符串?我的猜测是常量值的编译时复制......

但是向生成的代码添加常量将允许在属性中使用 T4MVC 生成的东西。

我想这样的事情:

插入@第 400 行:

        public const String ControllerNameCONST = @"<#=controller.ClassName #>";

插入@第 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 #>;
<#  }
} #>
        }

所以有人可以这样使用它:

[SomeAttribute(HomeController.ControllerNameCONST)]
//instead of 
[SomeAttribute("Home")]
//or
[SomeAttribute(HomeController.ActionNamesCONST.SomeAction)]
//instead of 
[SomeAttribute("SomeAction")]

编辑:将其用作模型上的自动完成属性,因此可以在模型上指定“目标”控制器和操作。虽然可以修改自动完成属性以将 ActionResult 作为参数而不是控制器+动作名称......

4

1 回答 1

5

更新 (12/7/2011):此问题现已修复(在 2.6.65 中)。请参阅http://mvccontrib.codeplex.com/workitem/7177


T4MVC 确实会生成许多常量。例如

对于控制器名称:MVC.Home.Name

对于动作名称:MVC.Home.ActionNames.About

对于视图名称:MVC.Home.Views.About

于 2011-06-24T16:57:47.883 回答