2016-04-11 15 views
-1

チームごとに4人のプレイヤーがいるので、 。私はチームにエラーを保存するために行くときリーグで選手を移入:"スキップのキーを持つタイプ 'IEnumerable <SelectListItem>'のViewDataアイテムはありません

"There is no ViewData item of type 'IEnumerable' that has the key 'Skip'`

CreateTeamコントローラ:

public ActionResult CreateLeagueTeam(int? id) 
{ 
    int leagueId = id.Value; 
    League league = db.Leagues.Include(x=>x.Members).First(l=> l.Id == leagueId); 
    var leagueMemberList = league.Members.ToList(); 
    var leagueMemberSelectListItems = new List<SelectListItem>(); 
    foreach(Member m in leagueMemberList) 
    { 
     leagueMemberSelectListItems.Add(new SelectListItem() { Text = m.FirstName + " " + m.LastName, Value = m.Id.ToString() }); 
    } 
    ViewData["leagueMemberList"] = leagueMemberSelectListItems; 
    return View(); 
} 

HTTP POSTのActionResult:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult CreateLeagueTeam([Bind(Include = "skip")] Team team) 
{   
    team.IsBonspiel = false; 
    team.IsLeague = true; 
    // team.Name = team.Skip.LastName; 
    team.YearActive = games.getSeasonYear(); 
    //finds and sets the league ID for the team 
    int leagueId = (int)Session["leagueId"]; 
    League league = db.Leagues.Find(leagueId); 
    team.League = league; 
    if (ModelState.IsValid) 
    { 
     db.Teams.Add(team); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(team); 
} 

は最後にエラーが投げているビュー:

<div class="form-group"> 
    @Html.Label("Skip", null, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.Skip, (IEnumerable<SelectListItem>)ViewBag.leagueMemberList, htmlAttributes: new { @class = "control-label col-md-2" }) 
    </div> 
</div> 

またチームモデル:

public class Team: Entity 
{ 
    [Required] 
    public bool IsBonspiel { get; set; } 
    [Required] 
    public bool IsLeague { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public int YearActive { get; set; } 
    public int? SkipId { get; set; } 
    public Member Skip { get; set; } 
    public string BonspielSkip { get; set; } 
    public List<BonspielTeamMember> BonspielMembers { get; set; } 
    public List<Member> Members { get; set; } 
    public List<Game> Games { get; set; } 
    public Bonspiel Bonspiel { get; set; } 
    public League League { get; set; } 
} 

答えて

1

コードに複数のエラーがあります。

  1. Skipは、複雑なオブジェクトであり、あなたは 複雑なオブジェクトに<select>をバインドすることはできません。あなたのビューに基づいて、それはあなたがleagueMemberList という名前ViewBag性質を持っていない @Html.DropDownListFor(m => m.SkipId, ...)
  2. でなければなりません((あなたがViewData["leagueMemberList"]の値を再割り当てしていない @Html.DropDownListFor(m => m.SkipId, (IEnumerable<SelectListItem>)ViewData["leagueMemberList"], ...)
  3. ViewBag.leagueMemberList = leagueMemberSelectListItems;にコントローラコードまたはビューのコードを変更したり、 POSTメソッドで ViewBag.leagueMemberListは)ModelStateは 無効である場合、あなたは(参照してください、それはnullになりますので、異なる 例外が発生しますビューを戻しthis question/answer
  4. POSTメソッドであなたの[Bind(Include = "skip")]コードは、あなたが結合することから、モデルのすべての プロパティを除外(Skip除き、あなたはSkipため 任意の値を掲載いけない)ので ModelStateが常に無効になることを意味し
0

あなたは「ViewDataを」にデータを追加しましたが、あなたはViewBagからアクセスしてみてください。 ViewDataがViewBagと異なることを知っておく必要があります。 したがって、あなたは、この行を変更してみてください:=> ViewBag.leagueMemberList = leagueMemberSelectListItemsに

ViewData["leagueMemberList"] = leagueMemberSelectListItems; 

を。

+0

ああ、私は私を実現didntはそれをスイッチしましたが、今私はスローされました このエラー: 'メンバー'キーを持つViewDataアイテムは、 'System.Collections.Generic.List'1 [[EloraCurling.Models.Member、EloraCurling、Version = 1.0。 0.0、Culture =ニュートラル、PublicKeyToken = null]] 'IEnumerable '型である必要があります。 –

+0

おそらく、投稿後のアクションでViewBag.leagueMemberListがnullです。 ビューバックに値を再割り当てする必要があります。 –

+0

私はそれがHttpPostアクションに選択されている値を渡して提出ヒットするべきではない? –

関連する問題