私は3つのクラスを持っています。私の作成ビューでは、すべての FootballTeam をロードするドロップダウン リストを取得しました。しかし問題は、コントローラーに投稿するときです。ModelState.IsValid が無効であるためです。「public virtual FootballTeam FootballTeam { get; set; }」を追加する前に機能したため、それが何かであることはわかっています:)
私がやりたいことは、選手をフットボール チームにバインドすることだけです。「パブリック仮想FootballTeam FootballTeam」を仮想FootballTeamの代わりにintに変更できますが、おそらくうまくいくはずです。しかし、このEntity Framework 1 対多で、仮想 FootballTeam で行ったようにマッピングするのに最適な方法であることがわかりました。
[HttpPost]
public ActionResult CreatePlayer(PlayerViewModel playerViewModel)
{
var team = db.FootballTeam.Find(playerViewModel.Player.FootballTeam.Id);
playerViewModel.Player.FootballTeam = team;
if (ModelState.IsValid)
{
db.Player.Add(playerViewModel.Player);
db.SaveChanges();
return RedirectToAction("Teams");
}
return RedirectToAction("Teams");
}
@model test.Models.PlayerViewModel
@Html.DropDownListFor(x => x.Player.FootballTeam.Id, Model.FootballTeams.Select(y => new SelectListItem
{
Text = y.Name,
Value = y.Id.ToString()
}))
public class Player
{
public int Id { get; set; }
public int ImageId { get; set; }
[Required(ErrorMessage = "Vänligen ange ett namn")]
public string Name { get; set; }
[Required(ErrorMessage = "Vänligen ange en possition")]
public string Position { get; set; }
[Required(ErrorMessage = "Vänligen ange födelseåret")]
public string BirthYear { get; set; }
[Required(ErrorMessage = "Vänligen ange en längd")]
public string Length { get; set; }
[Required(ErrorMessage = "Vänligen ange en vikt")]
public string Weight { get; set; }
[Required(ErrorMessage = "Vänligen ange moderklubben, alt ett '-'")]
public string FirstClub { get; set; }
public virtual FootballTeam FootballTeam { get; set; }
}
public class FootballTeam
{
public int Id { get; set; }
[Required(ErrorMessage = "Vänligen ange ett namn")]
public string Name { get; set; }
public ICollection<Player> Players { get; set; }
public ICollection<Coach> Coaches { get; set; }
[Required(ErrorMessage = "Vänligen fyll i information om laget")]
[DataType(DataType.MultilineText)]
public string Information { get; set; }
}
public class PlayerViewModel
{
public Player Player { get; set; }
public IEnumerable<Image> Image { get; set; }
public IEnumerable<FootballTeam> FootballTeams { get; set; }
}