我声明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”,行包含每个电子邮件地址字符串的长度。
为什么?如何配置内容以便在行中显示电子邮件地址并使用正确的列标题?非常感谢
答案 0 :(得分:1)
为什么?
因为如果没有显式指定列,则帮助程序使用反射来检查类型的公共属性,并为它们自动生成列。因此System.String
具有.Length
公共属性,因此您可以获得一列。
您需要使用自定义列:
@grid.GetHtml(
columns: grid.Columns(
grid.Column("email", format: item => item)
)
)
或者,您可以定义视图模型,让IEnumerable<T>
使用此视图模型而不是字符串。