控制器和动作名称 - 经过编译器验证

时间:2014-04-07 15:10:59

标签: c# asp.net-mvc

在不断发展的MVC应用程序中,我希望能够对控制器名称及其用于构造url的操作方法名称的正确性(或至少存在)进行编译器检查。那么

Url.Action("Index", "About")

变为:

Url.Action("Index", Helper.GetControllerNameFromType(typeof(AboutController))

保证AboutController类型存在。我可以处理控制器名称,因为从类型和名称可以获得控制器名称。

但是,使用action方法,我没有看到类型安全/编译器检查的方法来获取方法名称。有什么建议吗?

2 个答案:

答案 0 :(得分:7)

MvcContrib UrlHelper extension。它应该让你这样做:

Url.Action<AboutController>(c => c.Index())

答案 1 :(得分:0)

您可以创建一个带有泛型或类型的扩展方法,并通过约定获取名称。像

这样的东西
string ConventionBasedUrlAction(string action, Type controllerType)
{
    return Url.Action(action, typeof(controllerType).Name.Replace("Controller", string.empty));
}

如果它是扩展名,您可以保留Url.语法并在代码中自定义约定,同时保留原始备选方案。

编辑:MvcContrib已经拥有它,正如蒂姆指出的那样:)