2012-07-09 70 views
2

我正在我公司的Intranet站點上工作,在其中一個頁面上需要包含.PDF文件鏈接(如果存在)。沒問題,我得到了足夠好的工作。我遇到的問題是如果.PDF不存在,則更改鏈接。這是我目前有:試圖在MVC中創建一個動態鏈接3

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

我收到的錯誤: 參數3:無法從「lambda表達式」到「System.Func」

和 的「最佳重載方法匹配轉換System.Web.Helpers.WebGrid.Column(string,string,System.Func,string,bool)'有一些無效參數

我已經對Google做了一些盡職調查並找不到任何東西。有人能告訴我我要去哪裏嗎?

回答

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>) 
+0

太棒了!我是網絡開發新手,所以這對我來說仍然是非常新穎的,非常感謝您的幫助! – Mykal73 2012-07-10 14:26:08

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; 
} 
+0

你試過這個代碼嗎? – 2012-07-09 21:56:19

+0

不是真的達林。我使用了其中的一個代碼片段,並將其用於該問題。 – 2012-07-09 21:59:43

+0

我在說這個,因爲這段代碼不起作用。通常在將代碼發佈到Stack Overflow之前測試代碼是一種很好的做法。 – 2012-07-09 22:01:45