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をパラメーターとして受け取ることはできますが...