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

3
在不断发展的MVC应用程序中,我希望能够获取编译器检查控制器名称及其操作方法名称的正确性(或至少存在性),以构建URL。因此,
Url.Action("Index", "About")

成为:

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

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

然而,在操作方法中,我没有看到一种类型安全/编译器检查的方式来获取方法名。有什么建议吗?

2个回答

8

MvcContrib有一个针对UrlHelper扩展功能。它可以让您做到这一点:

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

好奇问一下,MVC Futues项目和MvcContrib有什么区别? - Andy T
据我所知,不同之处在于您需要从FluentController派生你的控制器。如果我错了,请纠正我。 - Cosmin

1
你可以创建一个扩展方法,接受一个泛型或类型,并通过约定获取名称。类似以下内容:
string ConventionBasedUrlAction(string action, Type controllerType)
{
    return Url.Action(action, typeof(controllerType).Name.Replace("Controller", string.empty));
}

如果是扩展程序,您可以保留Url.语法并在代码中自定义约定,同时保留原始的备选项。
编辑:正如Tim所指出的那样,MvcContrib已经具备此功能 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接