使用WebGrid显示电子邮件地址(字符串)列表 - ASP.Net MVC4

时间:2014-01-21 16:27:04

标签: asp.net-mvc-4 webgrid

我声明WebGrid如下:

@{
    WebGrid grid = null;
    if (Model.EmailAddressesOfChosenClient.Count<string>() != 0)
    {
        grid = new WebGrid(Model.EmailAddressesOfChosenClient, ajaxUpdateContainerId: "gridContent");
    }
}

然后我尝试按如下方式渲染WebGrid而不指定任何列:

<div id="gridContent">
@{ if (grid != null)
   {
      @grid.GetHtml()
   }
}
</div>

Model的EmailAddressesOfChosenClient属性是IEnumerable字符串,其中每个字符串都是一个电子邮件地址。我希望WebGrid包含一个标题为“电子邮件地址”的列,后面跟着一行电子邮件地址字符串。

如果我以这种方式呈现它,我的WebGrid会显示列标题“Length”,行包含每个电子邮件地址字符串的长度。

为什么?如何配置内容以便在行中显示电子邮件地址并使用正确的列标题?非常感谢

1 个答案:

答案 0 :(得分:1)

  

为什么?

因为如果没有显式指定列,则帮助程序使用反射来检查类型的公共属性,并为它们自动生成列。因此System.String具有.Length公共属性,因此您可以获得一列。

您需要使用自定义列:

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column("email", format: item => item)
    )
)

或者,您可以定义视图模型,让IEnumerable<T>使用此视图模型而不是字符串。