Пытаясь создать динамическую ссылку в MVC 3

Я работаю на сайте внутренней сети моей компании. На одной из страниц мне нужно включить ссылки на файлы.PDF, если они существуют. Нет проблем, я получил это, чтобы работать достаточно хорошо. У меня проблема с изменением ссылки, если.PDF не существует. Вот что у меня сейчас есть:

, grid.Column(format: (item) => (File.Exists(item.FileName)==true ? @<a href="@Url.Content(item.FileName)">Art Work</a> : Html.Raw(""))) 

Я получаю сообщения об ошибках: Аргумент 3: невозможно преобразовать лямбда-выражение в System.Func

И наилучшее перегруженное соответствие метода для 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' имеет недопустимые аргументы

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

2 ответа

Решение

Я бы определенно написал специальный помощник, который будет отвечать за генерацию правильной ссылки:

public static class HtmlExtensions
{
    public static IHtmlString LinkToFile(
        this HtmlHelper htmlHelper, 
        string filename
    )
    {
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        var file = htmlHelper.ViewContext.HttpContext.Server.MapPath(filename);
        if (!File.Exists(file))
        {
            return MvcHtmlString.Empty;
        }

        var anchor = new TagBuilder("a");
        anchor.Attributes["href"] = urlHelper.Content(filename);
        anchor.SetInnerText("Art Work");
        return new HtmlString(anchor.ToString());
    }
}

а затем внутри представления просто используйте этот помощник:

grid.Column(format: @<text>@Html.LinkToFile((string)item.FileName)</text>)

Попробуйте что-то вроде этого:

format: (item) =>
{
    if (File.Exists(item.FileName))
    {
        return new HtmlString(string.Format("<a href=\"{0}\">Art Work</a>", @Url.Content(item.FileName)));
    }

    return string.Empty;
}
Другие вопросы по тегам