有没有办法创建一个强类型的控制器动作?例如:
在我使用的控制器中:
aClientLink = Url.Action("MethodName", "ControllerName", new { Params... });
我想使用:
aClientLink = Url.Action(Controller.MethodName,ControllerName);
我不想重新发明轮子。我相信有人有一些聪明的解决方案。这将允许我向控制器方法添加编译时间检查。
有没有办法创建一个强类型的控制器动作?例如:
在我使用的控制器中:
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 源以获取将表达式作为输入值的辅助方法示例,您可以在此处查看我的答案,了解如何从表达式中检索有关对象属性的元数据。
然而...
在视图中使用,我认为这种方法将您的视图与控制器联系得太紧。我不喜欢魔术字符串,但它们确实提供了完全的解耦。
目前尚不清楚您是否想在控制器中使用此类方法,在这种情况下,关注点的分离就不会成为问题。您仍然会失去某些能力,例如为动作名称起别名的能力。