【问题标题】:No constants generated by T4MVC?T4MVC 没有生成常量?
【发布时间】:2011-12-08 15:24:55
【问题描述】:

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

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

我在想这样的事情:

插入@line 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 作为参数而不是控制器+动作名称...

【问题讨论】:

    标签: asp.net-mvc t4mvc


    【解决方案1】:

    更新(2011 年 12 月 7 日):此问题现已修复(在 2.6.65 中)。见http://mvccontrib.codeplex.com/workitem/7177


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

    控制器名称:MVC.Home.Name

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

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

    【讨论】:

    • 是的,我知道,但那些是只读的“常量”,而不是 C#“常量”。所以不能在属性中使用它们,因为会出现编译时错误:“属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式”
    • 啊,我明白了。是的,它今天不这样做。困难的部分是它不能像 MVC 一样被访问。* 就像 T4MVC 生成的其余部分一样。
    • @DavidEbbo,如果 MVC.Controller.Name 成为 C# 常量,这对于在服务器端进行历史管理的人来说非常有用。这样它们就可以在重定向逻辑中的 switch 语句中使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2018-04-01
    • 2016-10-30
    • 2011-05-02
    相关资源
    最近更新 更多