私は、バックエンド用にASP.NET Web API 2を、フロントエンド用にAngularJSを使用しています。 AngularJSにツリービューを表示したいASP.NET Web APIでネストされたツリーを構築する方法
私はASP Web APIにネストされたモデルが必要です。モデルは、現在、次のようになります。
public class Register
{
public int ID { get; set; }
public string Name { get; set; }
public List<Register> Children { get; set; }
}
と、このようなコントローラ:
JSON出力ショー:
私は例を、以下の追加私のデータベースで// GET: api/Registers
public IQueryable<Register> GetRegister()
{
return db.Register;
}
[{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]},{"ID":5,"Name":"Sub1","Children":null}]
最初のエントリはうまく見えますが、子自体を出力したくありません。子ども自身ではなく、Children
のRootFolder
のみを出力することは可能ですか?このように:
{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]}
第二の問題は、私は(たとえばID 4(RootFolder)
用)特定のフォルダのIDを入力したいとき、あります。私は唯一の応答としてこれを取得:
を子要素が存在しないのはなぜ?コントローラは、このいずれかになります。
// GET: api/Registers/5
[ResponseType(typeof(Register))]
public IHttpActionResult GetRegister(int id)
{
Register register = db.Register.Find(id);
if (register == null)
{
return NotFound();
}
return Ok(register);
}
概要:
- どのように私だけに出力をフィルタリングすることができ、それぞれの子供たちと
RootFolder
Sを示すが、子供を示していない自分自身をオブジェクト? - 特定のIDを指定すると、子供がいないのはなぜですか?
ありがとうございました。私は解決する必要があるいくつかの問題があります。今日私は子要素を取得していません(私は昨日から私のコードを変更しませんでした)。奇妙なことは:登録ID 4が5の子である場合、それは機能しません。私のID 5が4歳の子供であれば、それはうまくいきます。だから、子供はIDがRegister_IDより大きい場合にのみ働く。これは昨日問題ではなかった。私はこれを修正するとあなたの提案を試みますが、それは非常にうまく見えます。ありがとう! – Tobias
これで正常に動作しました。しかし、私は(x => x.Register_ID == null)を使うことはできません。 Register_IDはモデルによって不明です。なぜEFが "子"オブジェクトの名前をデータベースの "Register_ID"に変更したのか分かりません。 Register_IDの代わりにx.Childrenを使用すると、例外が発生し、オブジェクトとリストをnullと比較することができなくなります。 – Tobias
これをDapperで行う方法。私は同じ構造とモデルを持っています。 –