2012-10-02 44 views
22

me gustaría utilizar encargo @ Html.ActionLinkSystem.Web.Mvc.HtmlHelper' no contiene una definición para 'ActionLink'

Estoy tratando de utilizar el siguiente código: -

public static class LinkExtensions 
{ 
    public static MvcHtmlString MyActionLink(
     this HtmlHelper htmlHelper, 
     string linkText, 
     string action, 
     string controller) 
    { 
     var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action"); 
     var currentController = mlHelper.ViewContext.RouteData.GetRequiredString("controller"); 

     if (action == currentAction && controller == currentController) 
     { 
      var anchor = new TagBuilder("a"); 
      anchor.Attributes["href"] = "#"; 
      anchor.AddCssClass("currentPageCSS"); 
      anchor.SetInnerText(linkText); 
      return MvcHtmlString.Create(anchor.ToString()); 
     } 

     return htmlHelper.ActionLink(linkText, action, controller); 
    } 
} 

de Custom ActionLink helper that knows what page you're on

Pero me estoy

System.Web.Mvc.HtmlHelper' no contiene una definición para 'ActionLink' y ningún método de extensión 'ActionLink' aceptar un primer argumento de tipo 'System.Web.Mvc.HtmlHelper' se podían encontrar (estás falta una directiva using o una referencia de ensamblado?

+2

si está seguro de que ha agregado un espacio de nombres dentro de su configuración, es posible que tenga que cerrar y volver a abrir el archivo - marque esta respuesta http://stackoverflow.com/questions/4136703/razor-htmlhelper-extensions-not-found/ 4136773 # 4136773 – ssilas777

Respuesta

44

Añadir esta using System.Web.Mvc.Html; en la parte superior de su archivo

14

Asegúrese de tener el espacio de nombres para su clase de extensiones incluido en su web.config. Por ejemplo:

namespace MyProject.Extensions 
{ 
    public static class LinkExtensions 
    { 
     //code 
    } 
} 

En su sitio Web.config y/o Web.config ubicado en la carpeta de "Vistas":

<system.web> 
    <pages> 
     <namespaces> 
     <add namespace="MyProject.Extensions" /> 
     </namespaces> 
    </pages> 
    </system.web> 

De lo contrario incluyen un "uso" de bloques para el espacio de nombres en la parte superior de su página de vista puede funcionar, pero para los espacios de nombres comunes haría lo anterior.

ASPX:

<%@ Import namespace="MyProject.Extensions" %> 

RAZOR:

@using MyProject.Extensions 
+0

En última instancia, la parte web.config de esta respuesta es lo que me faltaba. –

5

Asegúrese de que dispone de los siguientes utilizando en el archivo de clase:

using System.Web.Mvc.Html; 

Esto es necesario porque la clase HtmlHelper se encuentra en System.Web.Mvc espacio de nombres, pero el método ActionLink extensión se encuentra en System.Web.Mvc.Html espacio de nombres.

+0

buena llamada, eso está incluido en el stock web.config pero quién sabe si eso es correcto en este caso –

+0

@JohnCulviner El truco es que la pregunta no es precisa sobre dónde se está produciendo el error. Si se trata de la Vista, entonces su respuesta es correcta (La vista no ve el espacio de nombres, por lo que debe agregarse en web.config). Si el error proviene de la clase de extensión, entonces está usando directiva en el archivo de la clase de extensión (web.config no ayudará aquí). Estoy adivinando aquí basándome en el hecho de que el error habla de 'ActionLink' y no del método' MyActionLink' - tenemos que esperar a que el autor aclare (con suerte volverá aquí). – tpeczek

Cuestiones relacionadas