4

T4MVCで生成されたコードに定数文字列がないのはなぜですか?私の推測では、定数値のコンパイル時のコピーです...

ただし、生成されたコードに定数を追加すると、T4MVCで生成されたものを属性で使用できるようになります。

私はこのようなことについて考えます:

@line 400を挿入:

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

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

したがって、誰かが次のように使用できます。

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

編集:モデルのオートコンプリート属性として使用したため、「ターゲット」コントローラーとアクションをモデルで指定できます。オートコンプリート属性を作り直して、コントローラー+アクション名の代わりにActionResultをパラメーターとして受け取ることはできますが...

4

1 に答える 1

5

アップデート(2011年12月7日):この問題は修正されました(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 に答える