私は2つのモデル(Ninja & Dojo)を持っています。ViewBagの表示クラスのプロパティを作成するにはどうすればよいですか?
これらは1対多の関係です(NinjaはOne Dojoに属し、DojoはNinjasを多く持つことができます)。
私はDapperを使用しています。私は私のコントローラで
public IEnumerable<Ninja> FindAll()
{
using (IDbConnection dbConnection = Connection)
{
dbConnection.Open();
return dbConnection.Query<Ninja>("SELECT * FROM ninjas");
}
}
Dojo.cs
using System.ComponentModel.DataAnnotations;
using System;
using System.Collections.Generic;
namespace dojoleague.Models {
public class Dojo : BaseEntity{
[Key]
public long Id {get; set;}
[Required]
public string Name {get; set;}
[Required(ErrorMessage="We have to know where it is")]
public string Location {get; set;}
[Required(ErrorMessage="Provide additional info on the Dojo")]
public string Description {get; set;}
public ICollection<Ninja> Ninjas { get; set; }
}
}
、
:
Ninja.cs
using System.ComponentModel.DataAnnotations;
using dojoleague.Models;
using System;
namespace dojoleague.Models {
public class Ninja : BaseEntity{
[Key]
public long Id {get; set;}
[Required(ErrorMessage="You need a name!")]
public string Name {get; set;}
[Range(1,11, ErrorMessage="Must be between 1 and 10")]
public int Level {get; set;}
[Required]
public Dojo Dojo {get; set;}
public string Description {get; set;}
}
}
Ninjafactory
ninjaFactory.Add(newNinja, dojo);
System.Console.WriteLine(newNinja.Dojo.Name);
ViewBag.Ninja = ninjaFactory.FindAll();
return View();
これで、System.Console.WriteLine(newNinja.Dojo.Name)は、コンソールにDojoの名前を正しく出力します。
ただし、WebブラウザにDojoの名前は表示されません。私CSHTMLで
、
@{
foreach(var ninja in ViewBag.Ninja){
<h2>@ninja.Name</h2>
<h4>@ninja.Dojo.Name</h4>
}
}
それは@ ninja.Nameを印刷んが、それは
RuntimeBinderExceptionを言っninja.Dojo.Name @プリントアウトしません:ヌルに実行時バインディングを実行できません参照
ViewBagを使用して、Ninjaクラスに属するDojoクラスの属性を作成するにはどうすればよいですか?
ありがとうございます。
あなたは 'ninjaFactory.FindAll()'メソッドを書くことができますか? – Kahbazi
公開IEnumerable FindAll() { using(IDbConnection dbConnection = Connection) { dbConnection.Open(); return dbConnection.Query ( "SELECT * FROM ninjas"); } } –
Jung
これは、MVCまたはビューバックとは関係ありません。エラーメッセージは、何が間違っているかを説明します。 'Dojo'プロパティは少なくとも* nullです。 *表示するDojoがありますか?データはどのように見えますか? –