WebGrid中的复杂类型

时间:2011-09-01 16:09:20

标签: asp.net-mvc-3 razor webgrid

令人惊讶的是,我一直在互联网上搜索如何从最近3个小时的数据源复杂类型绑定webgrid列。但我找不到任何有用的信息。 Complex WebGrid Binding in MVC 3上有一个主题,但它在我的方案中不起作用。

为了简化它,假设我有一个Employee对象列表,我填充了WebGrid,每个Employee都有Address属性,它是Address类型。

我想在WebGrid中显示Address字段的City属性以及Employee的其他字段。

我认为grid.Column(“Address.City”)可以工作,但事实并非如此。这是不支持的,或者我做错了什么。

感谢您的帮助。

此致

AnarchistGeek

2 个答案:

答案 0 :(得分:1)

我无法看到你的答案是如何解决这个问题的,直到我意识到我缺少的是有时属性可以为null而不是空引用错误你得到错误列“Address.City”不存在。除非您在格式属性.... I found the the answer here

中检查null
@functions{
        public class Employee
        {
            public string Name { get; set; }
            public Address Address { get; set; }
        }
        public class Address
        {
            public string City { get; set; }
        }
    }
    @{
        var myClasses = new List<Employee>{
              new Employee   { Name="A" , Address = new Address{ City="AA" }},
              new Employee   { Name="B" , Address = new Address{ City="BB" }},
              new Employee   { Name="C" , Address = new Address{ City=null }},
              new Employee   { Name="D" , Address = null},
    };
        var grid = new WebGrid(source: myClasses);
    }
    @grid.GetHtml(
    columns: grid.Columns(grid.Column("Address.City",
    header: "City",
    format: @<text>@if (item.Address != null)
                   {@item.Address.City}
    </text>), 
    grid.Column("Name")))

答案 1 :(得分:0)

这是我在ASP.NET论坛中得到的答案,我希望将其发布在其他人可能需要的地方。

主题链接为http://forums.asp.net/p/1718114/4586676.aspx/1?Re%20Complex%20data%20type%20in%20WebGrid

,解决方案是(已测试):

@functions{
    public class Employee
    {
        public string Name { get; set; }
        public Address Address { get; set; }
    }
    public class Address
    {
        public string City { get; set; }
    }
}
@{
    var myClasses = new List<Employee>{
          new Employee   { Name="A" , Address = new Address{ City="AA" }},
          new Employee   { Name="B" , Address = new Address{ City="BB" }},
          new Employee   { Name="C" , Address = new Address{ City="CC" }},
          new Employee   { Name="D" , Address = new Address{ City="DD" }},
};
    var grid = new WebGrid(source: myClasses);
}
@grid.GetHtml(
columns: grid.Columns(grid.Column("Address.City",header:"City"), grid.Column("Name")))

我希望它可以帮助别人。

干杯。