2011-10-31 61 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

太棒了,完美的作品! –