2

我在公司的 Intranet 站点上工作,在其中一个页面上,我需要包含指向 .PDF 文件的链接(如果存在)。没问题,我让它工作得很好。如果 .PDF 不存在,我遇到的问题是更改链接。这是我目前拥有的:

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

我收到错误消息:参数 3:无法从 'lambda 表达式' 转换为 'System.Func'

AND 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' 的最佳重载方法匹配有一些无效参数

我已经对 Google 进行了一些尽职调查,但找不到任何东西。有人可以告诉我哪里出错了吗?

4

2 回答 2

1

我肯定会编写一个自定义助手来负责生成正确的链接:

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>)
于 2012-07-09T21:54:53.630 回答
0

尝试这样的事情:

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;
}
于 2012-07-09T21:45:22.030 回答