J'ai deux modèles (Ninja & Dojo).Comment faire pour que ViewBag affiche la propriété de la classe?
Ils sont une relation à plusieurs (Ninja appartient à One Dojo alors que Dojo peut avoir beaucoup de Ninjas).
J'utilise Dapper.
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:
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; }
}
}
Dans mon contrôleur,
Je:
ninjaFactory.Add(newNinja, dojo);
System.Console.WriteLine(newNinja.Dojo.Name);
ViewBag.Ninja = ninjaFactory.FindAll();
return View();
Maintenant, System.Console.WriteLine (newNinja.Dojo.Name) affiche correctement le nom de Dojo dans la console.
Cependant, il ne montre pas le nom de Dojo sur mon navigateur Web.
Dans mon cshtml,
@{
foreach(var ninja in ViewBag.Ninja){
<h2>@ninja.Name</h2>
<h4>@ninja.Dojo.Name</h4>
}
}
Il n'imprime sur @ ninja.Name mais il n'imprime pas @ ninja.Dojo.Name dire
RuntimeBinderException: Impossible d'effectuer la liaison d'exécution sur un null référence
Comment faire l'attribut de la classe Dojo qui appartient à la classe Ninja en utilisant ViewBag ??
Merci beaucoup d'avance.
Pouvez-vous écrire votre méthode 'ninjaFactory.FindAll()'? – Kahbazi
public IEnumerable FindAll() { utilisant (IDbConnection dbConnection = Connexion) { dbConnection.Open(); return dbConnection.Query ("SELECT * FROM ninjas"); } } –
Jung
Ceci n'a rien à voir avec MVC ou viewbag. Le message d'erreur explique ce qui ne va pas. La propriété 'Dojo' est au moins * null *. * Y a-t-il un Dojo à afficher? À quoi ressemblent les données? –