2010-07-31 2 views
2

Я пытаюсь добавить метод расширения к моему проекту MVC 2 без успеха и после нескольких часов поиска в Интернете и глядя здесь Я в недоумении. Я создал новый проект MVC 2, чтобы убедиться, что в моем существующем проекте нет ничего странного, и я все еще сталкиваюсь с той же проблемой. Я уверен, что это ситуация, когда я «не вижу леса для деревьев», поэтому любая помощь будет принята с большой благодарностью. Вот код для метода расширения.Удлинительный метод UrlHelper не работает

using System.Web.Mvc; 

namespace ExtensionTest.Helper 
{ 
    public static class UrlExtensions 
    { 
     public static string Image(this UrlHelper helper, string fileName) 
     { 
      return helper.Content("~/Content/Images/" + fileName); 
     } 

    } 
} 

и вот код в виде (стандартном виде дома индекса, созданный по умолчанию для нового проекта MVC 2)

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 
<%@ Import Namespace="ExtensionTest.Helper" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home Page 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <%= UrlHelper.Image("test") %> 
    <h2><%: ViewData["Message"] %></h2> 
    <p> 
     To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. 
    </p> 
</asp:Content> 

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

CS0117: 'System.Web.Mvc.UrlHelper' does not contain a definition for 'Image' 

Сначала я думал, что это было так просто, как не добавляя ссылки (импорт заявление), но это не кажется это так. Для меня действительно странно, что я могу добавлять методы расширения к объекту HtmlHelper без проблем в этом же проекте.

Заранее благодарим за предоставленную помощь.

+0

У меня нет немедленного решения, не пытаясь тест-построить в течение очень долгого дня ... но вы пробовали переименование вспомогательной функции что-то явно менее распространенное/очевидное, чем «Изображение» ... возможно, «MyImage» или «TestImage», чтобы увидеть, отличаются ли результаты? – JcMaltaDev

ответ

1

Методы расширения в .NET должны быть вызваны на экземпляр объекта, а не на сам класс (хотя они и являются статическими).

Таким образом, вместо:

<%= UrlHelper.Image("test") %> 

попробовать:

<%= Url.Image("test") %> 
+0

LOL! Определенно, отсутствует сценарий леса для деревьев. Как смущающе ... Спасибо! –

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