2011-09-01 130 views
1

令人驚訝的是,我一直在互聯網上搜索如何綁定最近3小時爲數據源的複雜類型的webgrid列。但我找不到任何有用的信息。 Complex WebGrid Binding in MVC 3上有一個主題,但它在我的方案中不起作用。WebGrid中的複雜類型

爲了簡化它,假設我有一個Employee對象列表,我填充了WebGrid,每個Employee都有Address屬性,它是Address類型。

我想顯示WebGrid中的地址字段的City屬性以及Employee的其他字段。

我認爲grid.Column(「Address.City」)可以工作,但它不會。這是不支持的東西,或者我做錯了什麼。

感謝您的幫助。

問候

AnarchistGeek

回答

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"))) 

我希望它可以幫助別人。

乾杯。

1

我看不出你的答案如何解決問題,直到我意識到我所缺少的是有時該屬性可以爲null,而不是空引用錯誤,你會得到錯誤列「Address.City」會不存在。除非您檢查格式屬性中的空值.... I found the the answer here

@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")))