1

驚いたことに、私はインターネットで、過去3時間のデータソースである複合型からwebgrid列をバインドする方法を探していました。しかし、私は有用な情報を見つけることができませんでした。MVC 3の複雑なWebGridバインディングに関するトピックがありますが、私のシナリオでは機能しませんでした。

簡単にするために、WebGridにデータを入力するEmployeeオブジェクトのリストがあり、各EmployeeにはAddressタイプのAddressプロパティがあるとします。

WebGridのAddressフィールドのCityプロパティを、Employeeの他のフィールドと一緒に表示したいと思います。

grid.Column( "Address.City")は機能すると思いましたが、機能しません。それはサポートされていないものですか、それとも私は何か間違ったことをしています。

ご協力いただきありがとうございます。

よろしく

AnarchistGeek

4

2 に答える 2

1

私が見逃していたのは、プロパティがnullになることがあるが、null参照エラーの代わりに、列「Address.City」が存在しないというエラーが発生することであることに気付くまで、あなたの答えが問題をどのように修正しているかはわかりませんでした。formatプロパティで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")))
于 2013-03-15T13:49:44.633 に答える
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")))

それが他の人に役立つことを願っています。

乾杯。

于 2011-09-12T12:07:14.387 に答える