访问webgrid中的集合类型

时间:2014-01-15 14:21:00

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

我在asp.net mvc4应用程序中使用了webgrid

@if( @Model.Count  >   0){
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 5);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(
        tableStyle: "table_data",
        headerStyle: "table_header",
        columns: grid.Columns(
    grid.Column("Concept technique", "Concept technique", canSort: false, format: @<label>@Html.Raw(@item.Concept)</label>),
    grid.Column("Propriétés", "Propriétés", canSort: false, format: @<span>@{ 
                                   var liste= item.Propriétés;
                             foreach (var s in liste){@s}}</span>),
    grid.Column("Catégorie", "Catégorie", canSort: false, format: @<label>@Html.Raw(@item.Catégorie)</label>)

                                                                                                    )
                                                                                   );
}

此视图的模型包含一个名为PropriétésList<String>。我的问题在于此行

var liste= item.Propriétés;

我收到了这个错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Web.Helpers.WebGridRow' not contain the definition of 'Propriétés'
  1. 为什么会出现此错误?
  2. 如何解决此错误?

1 个答案:

答案 0 :(得分:2)

您无法定义和设置变量,也不能在模板中使用foreach循环。

您需要做的是创建一个html帮助器,并在模板中使用它:

在razor文件中定义它,然后在webgrid中使用它:

@helper Propriétés(List<string> propriétés)
{
    foreach (var p in propriétés)
    {
    <span>p</span>
    }
}

在webGrid列模板中使用它:

format: <text>@Propriétés(@item.Propriétés)</text>