12

我一直在尝试更改 WebGrid 中单个列的格式,但没有取得多大成功。说的专栏是这样的:

grid.Column(
    columnName: "EmailAddress", 
    header: "Email Address", 
    format:(item) => Html.EmailLink(item.EmailAddress, item.EmailAddress, ""), 
    canSort: false
),

错误是:

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

我很困惑,因为方法签名匹配。此外,如果我将列更改为以下内容,则它可以正常工作:

grid.Column(
    columnName: "EmailAddress", 
    header: "Email Address", 
    format:(item) => new HtmlString(String.Format("<a href=\"mailto:{0}\" class=\"{2}\">{1}</a>", item.EmailAddress, item.EmailAddress, "")), 
    canSort: false
),

供参考,EmailLink是一个很基础的HtmlHelper扩展方法:

public static IHtmlString EmailLink(this HtmlHelper helper, string emailAddress, string linkText, string linkClass) {
    return new HtmlString(String.Format("<a href=\"mailto:{0}\" class=\"{2}\">{1}</a>", emailAddress, linkText, linkClass));
}

谁能告诉我这里的问题是什么,以及我该如何解决?

4

1 回答 1

21

这是由于 WebGrid 的丑陋和所有这些动态的废话。你需要一个演员:

grid.Column(
    columnName: "EmailAddress", 
    header: "Email Address", 
    format: item => Html.EmailLink(
        (string)item.EmailAddress, 
        (string)item.EmailAddress, 
        ""
    ), 
    canSort: false
)

话虽如此,请毫不犹豫地查看MvcContrib GridTelerik Grid,它们要好得多。

于 2011-03-22T18:31:52.180 回答