8

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

在我使用的控制器中:

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

我想使用:

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

我不想重新发明轮子。我相信有人有一些聪明的解决方案。这将允许我向控制器方法添加编译时间检查。

4

1 回答 1

4

您可以创建自己的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 源以获取将表达式作为输入值的辅助方法示例,您可以在此处查看我的答案,了解如何从表达式中检索有关对象属性的元数据。

然而...

在视图中使用,我认为这种方法将您的视图与控制器联系得太紧。我不喜欢魔术字符串,但它们确实提供了完全的解耦。

目前尚不清楚您是否想在控制器中使用此类方法,在这种情况下,关注点的分离就不会成为问题。您仍然会失去某些能力,例如为动作名称起别名的能力。

于 2013-03-29T03:15:35.613 回答