#asp.net-mvc-3 #actionlink #webgrid
#asp.net-mvc-3 #actionlink #webgrid
Вопрос:
Я пытаюсь заполнить ячейку 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) =>», чтобы получить идентификатор строки, чтобы появилось правильное окно сведений.
Как я могу сделать так, чтобы столбец «Подробности» содержал маленький значок, при нажатии на который будет отображаться правильное всплывающее окно? Заранее спасибо.
Редактировать: вот несколько способов, которыми я пытался использовать ImageActionLink
grid.Column(... format: (item) => @Ajax.ImageActionLink( ... ) ),
Ошибка: Аргумент 3: не удается преобразовать из ‘лямбда-выражения’ в ‘System.Функция ‘
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. Можете ли вы опубликовать какой-нибудь пример кода, как вы пытались использовать этот
ImageActionLink
метод?
Ответ №1:
Я создал небольшой репозиторий, и со следующим синтаксисом он работает для меня. Одна важная вещь: вам нужно включить using для вашего пространства имен 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")