2

我不喜欢 Url.Action("string", "string) ,因此在下面写了扩展方法

public static string Action<TController>(this UrlHelper urlHelper, Expression<Func<TController, object>> actionExpression)
{
    var controllerName = typeof(TController).GetControllerName();
    var actionName = actionExpression.GetActionName();

    return urlHelper.Action(actionName, controllerName);
}

我在剃刀视图中使用它,如下所示:

@{Url.Action<ClientController>(action => action.ClientDetails());}

它不渲染任何东西。我在任何地方都犯了错误还是错过了什么?是否可以这样做,因为我喜欢类型安全的性质,而不是硬编码动作名称和控制器?

4

1 回答 1

1

使用括号表示代码块。使用括号(见下文)是一个显式表达式。表达式将作为 HTML 的一部分输出,但代码块不会。

@(Url.Action<ClientController>(action => action.ClientDetails()))

查看此 SO 帖子以获得更完整的答案。

于 2012-10-30T16:07:02.237 回答