Отображение нескольких ссылок на изображения вместо текста в WebGrid?
У меня есть определение WebGrid и три ссылки в одном столбце с использованием Html.ActionLink. Но когда я не использую свойство "LinkText", свойство ApplicantId передается как нулевое значение в контроллер.
С другой стороны, когда просто используется LinkTexts вместо " ", параметры id могут быть успешно переданы (Типы как "My Link Text" ниже). Однако я не хочу отображать текст по ссылке, и я просто хотел отобразить изображение.
Я думаю, что это может быть опечатка или есть другие способы, подходящие для MVC4 Razor, такие как @Url.Action и т. Д. Вот мой код в Razor View.
Не могли бы вы мне помочь, пожалуйста?
Заранее спасибо.
Посмотреть:
//for using multiple Html.ActionLink in a column using Webgrid
grid.Column("Operations", format: (item) =>
new HtmlString(
Html.ActionLink("My Link Text", "Edit", "Admin", new
{
applicantId = item.ApplicantID,
title = "Detail",
@class = "icon-link",
style = "background-image: url('../../Content/icons/detail.png')"
}, null).ToString() +
Html.ActionLink(" ", "Edit", "Admin", new
{
applicantId = item.ApplicantID,
title = "Edit",
@class = "icon-link",
style = "background-image: url('../../Content/icons/edit.png')"
}, null).ToString() +
Html.ActionLink(" ", "Edit", "Admin", new
{
applicantId = item.ApplicantID,
title = "Delete",
@class = "icon-link",
style = "background-image: url('../../Content/icons/delete.png')"
}, null).ToString()
)
)
<style type="text/css">
a.icon-link {
background-color: transparent;
background-repeat: no-repeat;
background-position: 0px 0px;
border: none;
cursor: pointer;
width: 16px;
height: 16px;
margin-right: 8px;
vertical-align: middle;
}
</style>
2 ответа
Вы можете использовать пользовательский метод HTML Helper, чтобы использовать его легко. Сделать это:
1) Создайте папку с именем HtmlHelpers и создайте класс с именем MyHelpers в этой папке. Затем определите свой класс, как показано ниже (вы можете улучшить его, добавив некоторые дополнительные свойства).
MyHelpers.cs:
using System;
using System.Web.Mvc;
namespace <YourProjectName>.WebUI.HtmlHelpers
{
public static class MyHelpers
{
public static MvcHtmlString ImageLink(this HtmlHelper html, string imagePath, string alt, string cssClass,
string action, string controllerName)
{
return ActionImage(html, imagePath, alt, cssClass, action, controllerName, null);
}
public static MvcHtmlString ImageLink(this HtmlHelper html, string imagePath, string alt, string cssClass,
string action, string controllerName, object routeValues)
{
var currentUrl = new UrlHelper(html.ViewContext.RequestContext);
var imgTagBuilder = new TagBuilder("img"); // build the <img> tag
imgTagBuilder.MergeAttribute("src", currentUrl.Content(imagePath));
imgTagBuilder.MergeAttribute("title", alt);
imgTagBuilder.MergeAttribute("class", cssClass);
string imgHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
var anchorTagBuilder = new TagBuilder("a"); // build the <a> tag
anchorTagBuilder.MergeAttribute("href", currentUrl.Action(action, controllerName, routeValues));
anchorTagBuilder.InnerHtml = imgHtml; // include the <img> tag inside
string anchorHtml = anchorTagBuilder.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(anchorHtml);
}
}
}
2) Перестройте свой проект, а затем добавьте эту строку в Razor View:
@using <YourProjectName>.WebUI.HtmlHelpers
3) Затем используйте этот метод Html Helper в вашем View следующим образом:
@Html.ImageLink("../../Content/icons/delete.png", "Delete", "your-class", "Delete", "Admin", new { item.ApplicantID })
Смехотворно, если вы хотите использовать ссылку на несколько изображений в одном столбце, вы можете объединить строки html следующим образом:
Посмотреть:
....
grid.Column("Operations", style: "your-class", format: (item) =>
new HtmlString(
@Html.ActionImage("../../Content/icons/detail.png", "Detail", "your-class", "Detail", "Admin", new { item.ApplicantID }).ToString() +
@Html.ActionImage("../../Content/icons/edit.png", "Edit", "your-class", "Edit", "Admin", new { item.ApplicantID }).ToString() +
@Html.ActionImage("../../Content/icons/delete.png", "Delete", "your-class", "Delete", "Admin", new { item.ApplicantID }).ToString()
)
)
...
Надеюсь это поможет. С уважением...
Ваши ссылки действий не вызываются правильно. Вы добавляете атрибуты HTML к своим значениям маршрута. Ваши ссылки для действий должны выглядеть следующим образом:
Html.ActionLink("My Link Text", "Detail", "Admin", new
{
applicantId = item.ApplicantID
}, new
{
title = "Detail",
@class = "icon-link"
})
Проверьте эту ссылку, чтобы увидеть, как вы можете скрыть текст ссылки и вместо этого отобразить изображение, используя css: CSS Скрыть текст, но показать изображение?