MVC4 WebGrid中的项目类型是什么

时间:2012-09-06 11:25:09

标签: asp.net-mvc-3 asp.net-mvc-4 webgrid asp.net-mvc-3-areas razor-declarative-helpers

我使用webgrid来替换记录列表。

我的观点与IEnumerable紧密结合。

@model IEnumerable<Models.SitesConfig.Configuration>

我将webgrid与Model绑定。

var grid = new WebGrid(Model, rowsPerPage: 50);

我正在尝试使用@helper方法格式化列。 @helper方法采用Models.SitesConfig.Configuration类型的参数。

当我尝试加载视图时,我收到无效的参数错误。

这是我的观点。

    @model IEnumerable<Models.SitesConfig.SiteConfiguration>
@section Styles {
    <link href="@Url.Content("~/Content/SatelliteSite.css")" rel="stylesheet" type="text/css" />
}

@{
    ViewBag.Title = "List of Satellite Sites";
}
@helper FormatTemplateColors(Models.SitesConfig.SiteConfiguration item)
{
    @String.Format(
        "Border: {0} <br/>Link: {1} <br/>Text: {2}",
        item.BorderColor != null ? item.BorderColor.Name : string.Empty,
        item.LinkColor != null ? item.LinkColor.Name : string.Empty,
        item.TextColor != null ? item.TextColor.Name : string.Empty)
}
@{
    var grid = new WebGrid(Model, rowsPerPage: 50);
}
<div>
    @grid.GetHtml(columns: grid.Columns(
        grid.Column("Template", 
            style: "color-column-width", 
            format:(item) => @FormatTemplateColors(item)
        )
         )
</div>

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

format lambda中,item参数是WebGridRow类的一个实例(以dynamic的形式),其中Value属性包含实际项目。

所以你需要写:

format:(item) => @FormatTemplateColors(item.Value)

SideNote如果您不想输出html,则需要使用Html.Raw助手。因此,将您的助手修改为:

@helper FormatTemplateColors(Models.SitesConfig.SiteConfiguration item)
{
    @Html.Raw(String.Format(...
}