MVC3 Ajax.ImageActionLink в WebGrid - PullRequest
       12

MVC3 Ajax.ImageActionLink в WebGrid

2 голосов
/ 31 октября 2011

Я пытаюсь заполнить ячейку WebGrid изображением, которое откроет всплывающее окно «Подробности» в зависимости от выбранной строки. В настоящее время у меня есть это для колонки сведений:

grid.Column(header: "Details", format: (item) => @Ajax.ActionLink("pop", "GetDetails", new { id = item.FormId }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "formdetails", InsertionMode = InsertionMode.Replace, OnSuccess = "openPopup" })
                                          , style: "colImages"),

Это открывает всплывающее окно, но вместо изображения в столбце есть текст «pop».

Я видел несколько сайтов, которые говорили о создании отдельного класса ImageActionLink для помощи в создании объектов ActionLink с изображениями. Этот код выглядит так:

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

Однако я не могу заставить этот код работать ВНУТРИ WebGrid. В основном это связано с тем, что мне нужна часть "(item) =>", чтобы получить идентификатор строки, чтобы всплыло правильное окно с подробностями.

Как я могу получить в столбце "Сведения" небольшую иконку, которая при нажатии выдает правильное всплывающее окно? Заранее спасибо.

Edit: вот несколько способов, которыми я пытался использовать ImageActionLink

grid.Column(... format: (item) => @Ajax.ImageActionLink( ... ) ),

Ошибка: аргумент 3: невозможно преобразовать лямбда-выражение в System.Func

grid.Column(... format: (item) => @(new HtmlString(@Ajax.ImageActionLink( ... ) ),

Ошибка: ожидается ключевое слово, идентификатор или строка после спецификатора дословно: @

grid.Column(... format: (item) => @HtmlString(@Ajax.ImageActionLink( ... ) ),

Ошибка: «System.Web.HtmlString» является «типом», но используется как «переменная»

grid.Column(... format: @HtmlString((item) => @Ajax.ImageActionLink( ... ) ),

Ошибка: «System.Web.HtmlString» является «типом», но используется как «переменная»

1 Ответ

2 голосов
/ 31 октября 2011

Я создал небольшое репродукцию, и со следующим синтаксисом он работает для меня.Одна важная вещь: вам нужно включить использование для вашего пространства имен класса ImageActionLinkHelper в верхней части вашего представления.

@using namespaceofImageActionLinkHelper
...

grid.Column(header: "Details",
                    format: (item) => 
                        @Ajax.ImageActionLink(
                            @Url.Content("~/Content/images/image.jpg"),
                            "alt of the image",
                            "GetDetails",
                            new { id = item.FormId },
                            new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "formdetails", InsertionMode = InsertionMode.Replace, OnSuccess = "openPopup" })                    
                    , style: "colImages")
...