ImageActionLink Newbe Redux - PullRequest
       25

ImageActionLink Newbe Redux

0 голосов
/ 19 сентября 2011

Я уже несколько часов бьюсь головой, поэтому спрошу ...

Во всех примерах для ImageActionBuilders метод выглядит следующим образом:

public static class ImageActionLinkHelper 
    { 
        public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string actionName, object routeValues, AjaxOptions ajaxOptions) 
        { 
            var builder = new TagBuilder("img"); 
            builder.MergeAttribute("src", imageUrl); 
            builder.MergeAttribute("alt", ""); 
            var link = helper.ActionLink(builder.ToString(TagRenderMode.SelfClosing), actionName, routeValues, ajaxOptions); 
            return link.ToHtmlString(); 
        } 
    } 

Я создал библиотеку классов, включил метод, сослался на него в своем проекте, и я вижу его.

Вызов в представлении (.chtml) документируется следующим образом:

@jax.ImageActionLink("../../Content/Images/button_add.png", "JobTasksNew", "TrackMyJob",new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tmjDynamic" })) 

Будучи новичком в C #, первый параметр (этот помощник Ajaxhelper) никогда не упоминается в вызове из View ни в одном из сообщений здесь.

Компилятор на моей машине жалуется на отсутствие параметра, когда я структурирую вызов, идентичный приведенному выше.

Я что-то упустил. Как передается или разрешается первый параметр?

Спасибо.

1 Ответ

0 голосов
/ 19 сентября 2011

Если вы новичок в C #, прежде чем перейти к ASP.NET MVC, вы должны прочитать о методах расширения в C # . Что они и как они работают. На самом деле это личный совет, который я могу вам дать: изучите C # / VB.NET, прежде чем переходить в ASP.NET MVC. Это все равно что пытаться построить машину, не открыв двигателя внутреннего сгорания.

Вот что такое HTML-помощники в ASP.NET MVC: методы расширения. В вашем примере вы определили метод расширения ImageActionLink внутри статического класса ImageActionLinkHelper. Предположим, что этот класс определен в пространстве имен Foo:

namespace Foo
{
    public static class ImageActionLinkHelper 
    { 
        public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string actionName, object routeValues, AjaxOptions ajaxOptions) 
        {
            ...
        }
    }
}

Вы должны перенести это Foo пространство имен в область видимости, чтобы ваш метод расширения был доступен:

@using Foo
...
@Ajax.ImageActionLink("../../Content/Images/button_add.png", "JobTasksNew", "TrackMyJob",new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tmjDynamic" })) 

или если вы хотите, чтобы он был доступен во всех представлениях Razor вашего приложения ASP.NET MVC 3, добавьте пространство имен Foo в раздел <namespaces> файла ~/Views/web.config.

...