0

カテゴリ テーブル:

ID => int、主キー

カテゴリ名 => varchar

ParentCategoryID => int 、null 可能

次の json データ形式を生成します。

[{
    "id":1,
    "name":"Root",
    "Edit":"<a href='Edit/id'>edit.png</a>",
    "Delete":"<a href='Delete/id'>delete.png</a>",
    "children":[{
        "id":2,
        "name":"Horoscope",
        "Edit":"<a href='Edit/id'>edit.png</a>",
        "Delete":"<a href='Delete/id'>delete.png</a>",
        "children":[{
            "id":21,
            "name":"Daily",
            "Edit":"<a href='Edit/id'>edit.png</a>",
            "Delete":"<a href='Delete/id'>delete.png</a>",
            "children":[{
                "id":211,
                "name":"Aries",             
                "Edit":"<a href='Edit/id'>edit.png</a>",
                "Delete":"<a href='Delete/id'>delete.png</a>"
            },{
                "id":212,
                "name":"Taurus",                
                "Edit":"<a href='Edit/id'>edit.png</a>",
                "Delete":"<a href='Delete/id'>delete.png</a>"
            }]
        },{
            "id":22,
            "name":"Weekly",            
            "Edit":"<a href='Edit/id'>edit.png</a>",
            "Delete":"<a href='Delete/id'>delete.png</a>",
            "children":[{
                "id":221,
                "name":"Gemini",                
                "Edit":"<a href='Edit/id'>edit.png</a>",
                "Delete":"<a href='Delete/id'>delete.png</a>"
            },{
                "id":222,
                "name":"Aries",             
                "Edit":"<a href='Edit/id'>edit.png</a>",
                "Delete":"<a href='Delete/id'>delete.png</a>"
            },{
                "id":223,
                "name":"Taurus",            
                "Edit":"<a href='Edit/id'>edit.png</a>",
                "Delete":"<a href='Delete/id'>delete.png</a>"
            }]
        }]
    },{
        "id":3,
        "name":"News",      
        "Edit":"<a href='Edit/id'>edit.png</a>",
        "Delete":"<a href='Delete/id'>delete.png</a>",
        "children":[{
            "id":31,
            "name":"Sports",            
            "Edit":"<a href='Edit/id'>edit.png</a>",
            "Delete":"<a href='Delete/id'>delete.png</a>"
        },{
            "id":32,
            "name":"Interantional",         
            "Edit":"<a href='Edit/id'>edit.png</a>",
            "Delete":"<a href='Delete/id'>delete.png</a>"
        },{
            "id":33,
            "name":"Entertaintment",            
            "Edit":"<a href='Edit/id'>edit.png</a>",
            "Delete":"<a href='Delete/id'>delete.png</a>"
        }]
    }]
}]

上記のjson形式が必要なJquery TreeGridプラグインがあります。データベースのカテゴリテーブルから上記のjsonデータを生成し、コントローラーアクションでjsonデータを返すにはどうすればよいですか。モデルにエンティティ フレームワークを使用しています。

4

2 に答える 2

1

最初からデータと UI 命令を混在させるつもりはありません。冗長な繰り返しデータで JSON メッセージが乱雑になります。データをどこに置くか、どのように表示するかを決めるのはクライアント次第だと思います。さもなければ、これらの指示を別々に (たとえば、メッセージの最初の部分として) 送信する必要があります。

つまり、これを行う最も簡単な方法は、クラス定義を次のようにすることです。

class Category
{
    public int Id { get; set; }
    public string CategoryName { get; set; }
    public int? ParentCategoryID { get; set; }
    [ForeignKey("ParentCategoryID")]
    public virtual ICollection<Category> SubCategories { get; set; }
}

を使用してクエリCategoriesを実行しParentCategoryID == null、遅延読み込みを有効にして JSON にシリアル化すると、すべてのレベルが含まれていることがわかります。これは、各Categoryクエリがその子を取得するために発行されるためです。

Categoryにはプロパティがないことに注意してくださいParentCategory。これは、循環参照が原因で JSON シリアル化が失敗する可能性があるためです。

JavaScriptSerializerMVC APIコントローラーを使用していない場合は、シリアライゼーションに使用できます。

ところで。これを行う最善の方法は、ドメイン モデルをトランスポートを無視したままにして、CategoryDtoオブジェクトの構造を使用することです。

于 2013-02-13T12:56:34.983 に答える