4

列/フィールドをjsonの子プロパティにバインドして、Kendoグリッドのモデル設定(javascript)を作成するにはどうすればよいですか?たとえば、グリッドにFName、LName、Street、Addressの列を含める必要があります。基本的に、Webサービスによって返される階層構造をフラット化したいと思います。

剣道の設定

fields: {
    FName: { type: "string" },
    LName: { type: "string"  },
    // How to map to child properties below?
    Street: { field: "Address.Street" },    // this is wrong             
    City: { field: "Address.City" }         // this is wrong
}

JSON

{
   "FName": "William",
   "LName ": "Shakespeare",            
   "Address":
          {
          "Address": "123 Street Ln",
          "City": "Philadelphia"
          }
}
4

1 に答える 1

3

あなたはそのようにそれをしません。データ グラフを平坦化するクラス「モデル」を作成する必要があります。モデルの構築中に遅延読み込みを使用できます。このモデルをコントローラーを介してビューに送信するか、ビューに送信されるより大きなビューモデル (MVVM ではなくモデルのモデルのみ) にアタッチします。次に、これをグリッドにバインドします。

しかし、JSON と同じモデルの Ajax 読み込みを使用する方が幸せになるでしょう。これは、あなたがやろうとしていると思います。

モデル

public class ContactModel
{
    public string FName { get; set; }
    public string LName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }

    public ContactModel()
    {}
    public ContactModel(Contact contact) // IContact is better if you have Interfaces
    {
        FName = contact.FName;
        LName = contact.LName;
        Address = contact.Address.Address;
        City = contact.Address.City;
    }

    // Neat Linq trick to convert database query results directly to Model
    public static IList<ContactModel> FlattenToThis(IList<Contact> contacts)
    {
        return contacts.Select(contact => new ContactModel(contact)).ToList();
    }
}

コントローラ

public JsonResult ReadContacts([DataSourceRequest]DataSourceRequest request)
{
    var contacts = _contactsDataProvider.Read(); // Your database call, etc.
    DataSourceResult result = ContactModel.FlattenToThis(contacts).ToDataSourceResult(request);
    return Json(result, JsonRequestBehavior.AllowGet);
}

でも、ウィルがフィラデルフィアにたどり着いたとは思わない。;)

于 2013-02-08T13:58:33.407 に答える