【问题标题】:can't access to an extension method with UrlHelper parameter in controller! Vice versa in view have access无法访问控制器中带有 UrlHelper 参数的扩展方法!反之亦然在视图中具有访问权限
【发布时间】:2010-04-06 18:09:21
【问题描述】:

为什么没有在 Url 中添加使用 UrlHelper 定义的扩展方法。EXTENSIONMETHOD 当我想在控制器中使用它时!但我可以访问它?

public static string Home(this UrlHelper helper)
{
    return helper.RouteUrl("ABC", new { controller = "ABC", Action = "Default" });
}

我还没有访问:

public ActionResult Default()
{
    return Redirect(Url.Home());
}

我有访问权限:

<a href="<%=Url.Home() %>" title="Hello">Hello</a>

【问题讨论】:

    标签: asp.net-mvc controller extension-methods urlhelper


    【解决方案1】:

    UrlHelper 是 Controller 而非 ControllerBase 的属性。

    检查您是否在视图中导入了扩展方法类的命名空间。如果你一遍又一遍地导入同一个命名空间,你可以在 web.config 中添加它:

    <pages>
        <namespaces>
            <add namespace="System.Web.Mvc"/>
            <add namespace="System.Web.Mvc.Html"/>
            <add namespace="System.Web.Routing"/>
            <add namespace="Telerik.Web.Mvc"/>
            <add namespace="Telerik.Web.Mvc.UI"/>
            <add namespace="Shrinkr"/>
            <add namespace="Shrinkr.DataTransferObjects"/>
            <add namespace="Shrinkr.Web"/>
        </namespaces>
    </pages>
    

    【讨论】:

      【解决方案2】:

      Url is a member of ViewPage,但不是 ControllerBase。因此,您没有可用于构造函数的预构造 UrlHelper。一般来说,您不需要在控制器中生成 URL。

      你为什么不用Controller.RedirectToRoute

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多