2012-06-15 2 views

ответ

14

Вы не вызывая расширение метод правильно. Оно должно быть:

@Url.MRUrl() 

Пожалуйста, прочтите о том, как методы расширения работы в C# перед использованием: http://msdn.microsoft.com/en-us/library/bb383977.aspx

метод расширения расширяет данный тип (UrlHelper в вашем случае) и вызывается на экземпляра этого типа. Поэтому, поскольку в вашем представлении у вас уже есть экземпляр UrlHelper (на всем протяжении свойства Url), и поэтому вы можете напрямую ссылаться на свой метод расширения на нем.

Перед тем, как вызвать метод расширения, что нужно, чтобы привести его в рамки, добавив пространство имен, в котором определен содержащий его класс:

@using MyNS.Helpers 
@Url.MRUrl() 

Также методы расширения должны быть объявлены внутри статического класса , Ваш код C# даже не компилируется. Так исправить это:

namespace MyNS.Helpers 
{ 
    public static class HtmlHelper // Bad name choice I know. 
    { 
     public static string MRUrl(this UrlHelper url) 
     { 
      return "blah"; 
     } 
    } 
} 

Все, что является стандартным C#, не имеет ничего общего с ASP.NET MVC или Razor.

Теперь кое-что ASP.NET MVC конкретно: если вы хотите, чтобы избежать необходимости того, чтобы принести пространство имен в область видимости в каждом представлении (@using MyNS.Helpers) вы можете добавить его в <namespaces> теге файла ~/Views/web.config (не путать с ~/web.config).

+0

Отличный ответ. Такие люди, как вы, окружают мир :) – Doomsknight

+1

@ Darin, вы рок-звезда в stackoverflow. Спасибо за вашу отличную поддержку! –

Смежные вопросы