2011-10-31 118 views
2

我想用一個圖像填充一個WebGrid單元格,該圖像將打開一個基於選中哪一行的「Details」彈出窗口。目前,我有這樣的細節列:MVC3 WebGrid中的Ajax.ImageActionLink

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"), 

這打開了彈出很好,但有文「流行」之列,而不是圖像。

我見過很多網站正在討論創建一個單獨的「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)=>」部分來獲取行的ID,以便彈出正確的細節窗口。

如何獲取「詳細信息」列以包含點擊時彈出正確的彈出窗口的小圖標?提前致謝。

編輯:這裏有幾種方法我試過用ImageActionLink

grid.Column(... format: (item) => @Ajax.ImageActionLink(...)), 

錯誤:參數3:無法從 'lambda表達式' 到 'System.Func'

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'是‘類型’,但使用類似‘變量’

+0

你可以張貼一些示例代碼,你如何試圖使用'ImageActionLink'方法? – nemesv

+0

已編輯原創帖子 –

回答

2

I」我創建了一個小的repro,並使用下面的語法爲我工作。一個重要的事情:你需要在你的視圖的頂部包含一個用於你的名字空間的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") 
+0

太棒了,完美的作品! –