2012-08-30 6 views
13

Ich habe eine Erweiterungsmethode erstellt und den Namespace in meine web.config Datei aufgenommen. Die Erweiterungsmethode funktioniert einwandfrei und ist vom Testcode OK. Das Problem ist, ich bekomme immer noch einen Fehler in Bezug auf den Namespace nicht gefunden.MVC 4 und Erweiterungsmethoden mit Razor

Die ASP .NET Fehlermeldung Ich erhalte ist:

CS1061: ‚System.Uri‘ enthält keine Definition für ‚IsCurrentUrl‘ und keine Erweiterungsmethode ‚IsCurrentUrl‘ ein erstes Argument vom Typ akzeptieren 'System.Uri' könnte gefunden werden (fehlt eine Verwendungsrichtlinie oder eine Baugruppenreferenz?)

Unten ist der entsprechende Code.

Web.config:

<system.web> 
    <httpRuntime targetFramework="4.5" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <pages> 
     <namespaces> 
      <add namespace="System.Web" /> 
      <add namespace="System.Web.Helpers" /> 
      <add namespace="System.Web.Mvc" /> 
      <add namespace="System.Web.Mvc.Ajax" /> 
      <add namespace="System.Web.Mvc.Html" /> 
      <add namespace="System.Web.Routing" /> 
      <add namespace="System.Web.WebPages" /> 
      <add namespace="MyMainSite2.Library.Extensions" /> 
     </namespaces> 
    </pages> 
</system.web> 

Erweiterung Methodencode:

namespace MyMainSite2.Library.Extensions 
{ 
    public static class UriExtensions 
    { 
     #region Public Static Methods 

     public static bool IsCurrentUrl(this Uri uri, string url) 
     { 
      if (String.IsNullOrWhiteSpace(url)) 
       return false; 

      url = url.Trim().ToLower(); 
      string absolutePath = uri.AbsolutePath.Trim().ToLower(); 

      if (!url.StartsWith("/") && absolutePath.StartsWith("/")) 
       absolutePath = absolutePath.Remove(0, 1); 

      bool match = absolutePath == url; 

      return match; 
     } 

     #endregion 
    } 
} 

Razor Code:

@model MyMainSite2.UI.Web.Models.Shared.TopMenuModel 

@foreach (var item in this.Model.Items) 
{ 
    if(this.Request.Url.IsCurrentUrl(item.Url)) // this line is failing because UriExtensions.IsCurrentUrl is not being found 
    { 
     @:<li class="current"> 
    } 
    else 
    { 
     @:<li> 
    } 

    @:<a href="@item.Url">@item.Text</a></li> 
} 
+0

Haben Sie die richtige using-Anweisung in der View-Datei? – dtsg

+0

Nein. Ich setze den Namespace in die Datei web.config, so dass ich das nicht für jede Ansichtsdatei machen muss. – rhughes

+0

Haben Sie versucht, es in 'MyMainSite2.Library.Extensions.UriExtensions' zu ändern? – dtsg

Antwort

22

Die Antwort wurde von petro.sidlovskyy gegeben.

Ich habe den Namespace der Hauptdatei Web.config und nicht der Web.config der Ansicht hinzugefügt.

Als ich den Namespace der Datei Web.config im Ordner Ansichten hinzugefügt habe, wurde der Namespace von der Ansicht erkannt und das Problem wurde behoben.