我使用System.Web.Helpers.WebGrid
来显示IEnumerable<Request>
。请求具有一些导航属性。
每当我通过任何一个字段点击标题排序时,异常Object reference not set to an instance of an object.
就会上升。
我用这种方式编写这种类型的列:
grid = new WebGrid(Model.Requests);
// things
@grid.GetHtml(columns: new[]{
//[...] columns
SDMs.Column("User.Name", "User", format: p => p.User != null ? p.User.Name : ""),
//[...] more columns
})
请注意,我使用format
参数在网格加载时设置自定义结果。
我认为这是因为没有关联User
的行,但我不知道如何自定义这些情况下的行为。
我在网上发现了this,但我似乎没有在我的版本的程序集中使用此方法。我也不知道如何得到它。我尝试安装NuGet包,但没有帮助。
有什么想法吗?
答案 0 :(得分:2)
为Request添加扩展方法/ partial class的属性,例如ActualOrEmptyUserName。 在Getter中,您可以检查用户是否已填充,如果是,则返回user.name else返回“”。
在你的grigview中,你将列绑定到user.name的ActualOrEmptyUserName insetad
public partial class Request
{
public string ActualOrEmptyUserName
{
get
{
var username = "";
if (Request.User != null && Request.User.Name != null)
username = Request.User.Name;
return username;
}
}
}
...
SDMs.Column("ActualOrEmptyUserName", "User")
另一种选择: Itarete(或linq)通过您的列表,并检查user的值,如果它为null,则为该值创建一个空用户,并使用string.empty或“”填充Name。
此操作可以在您的控制器或视图的上半部分。这取决于你。
但我猜你不能像你想的那样使用这种格式。