编译时检查指向控制器方法的操作链接

本文关键字:方法 操作 链接 控制器 检查 编译 | 更新日期: 2023-09-27 18:06:20

是否有办法创建一个强类型的控制器动作?例如:

在控制器中我使用:

aClientLink = Url.Action("MethodName", "ControllerName", new { Params... });

我想使用:

aClientLink = Url.Action(Controller.MethodName,ControllerName);

我不想重新发明轮子。我肯定有人有聪明的解决办法。这将允许我在控制器方法中添加编译时间检查。

编译时检查指向控制器方法的操作链接

您可以创建自己的HtmlHelper扩展方法,该方法使用表达式(与使用表达式引用模型属性的方式相同)。

@* An expression used to indicate which property of the model should be
examined. It may or may not actually be executed. *@
@Html.IdFor( o => o.FirstName )
@* Don't actually evaluate the expression, just parse it for the method name *@
@Url.ActionFor( o => o.ControllerMethod() )

您可以查看MVC源代码中的帮助方法示例,这些方法将表达式作为输入值,并且您可以在这里看到我如何从表达式中检索关于对象属性的元数据的答案。

然而…

在视图中使用

,我认为这种方法将视图与控制器捆绑得太紧了。我不喜欢魔法字符串,但它们确实提供了完全的解耦。

还不清楚你是否想在控制器中使用这样的方法,在这种情况下,关注点分离就不那么成问题了。您仍然会失去某些功能,例如别名操作名称的功能。