【问题标题】:WebGrid Column Format Issue in MVC3MVC3 中的 WebGrid 列格式问题
【发布时间】:2011-07-20 16:04:02
【问题描述】:

我一直在尝试更改 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));
}

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

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor webgrid


    【解决方案1】:

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

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

    话虽如此,请不要犹豫,结帐MvcContrib GridTelerik Grid,它们要好得多。

    【讨论】:

    • 完美,这解决了问题。我将看看 MvcContrib 控件,因为这个解决方案非常不优雅。我不知道他们已经发布了任何兼容 Razor/MVC3 的东西吗?
    • @Rory McCrossan,WebGrid 是随 MVC 3 一起发布的,它应该可以与 Razor 很好地配合使用,所以这是目前您从 Microsoft 获得的最好的。
    • 从 Microsoft 获得的总是最好的。
    • 是否可以使用 HtmlString 作为标题?我一直在尝试将 HtmlString 转换回字符串,但结果是字符串显示为纯 html ......我一直在考虑覆盖 WebGrid,但我希望有更简单的方法。如果您可以扩展此答案,那就太好了,以便 HtmlString 可以用于 header 属性。
    猜你喜欢
    • 2011-11-09
    • 2011-06-19
    • 2012-12-01
    • 1970-01-01
    • 2013-05-09
    • 2011-07-04
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多