2016-04-11 16 views
-1

Bir takım oluşturmayı deniyorum, takım başına 4 oyuncu var, bu yüzden içerdiği 4 seçim listesi var. ligde oyuncuları doldurmak Ben takımını hatasını kurtarmak için gittiğinizde:."Atla" anahtarına sahip 'IEnumerable <SelectListItem>' türünde ViewData öğesi yok

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

CreateTeam kontrolörü:

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); 
} 
Nihayet

Hata atılan oluyor görünüm:

<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> 
Ayrıca

Takım Modeli:

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; } 
} 

cevap

1

Kodunuzda birden çok hata var.

  1. Skip karmaşık bir nesnedir ve bir karmaşık nesneye bir <select> bağlamak mümkün değil. Sizce dayanarak, @Html.DropDownListFor(m => m.SkipId, ...)
  2. Sen leagueMemberList adında bir ViewBag özelliği yok olmalıdır (ViewBag.leagueMemberList = leagueMemberSelectListItems; için kontrolör kodunu veya Sen ViewData["leagueMemberList"] değerini yeniden atama yok @Html.DropDownListFor(m => m.SkipId, (IEnumerable<SelectListItem>)ViewData["leagueMemberList"], ...)
  3. için görünüm kodunu değiştirmek (veya POST yöntemi ViewBag.leagueMemberList) ModelState geçersizse ve (bakınız o null olacağı için farklı istisna sonuçlanacaktır görünümü, dönmek this question/answer
  4. POST yöntemiyle Your [Bind(Include = "skip")] kodu bağlanmasını modelin her özelliği hariç çünkü ModelState her zaman geçersiz olacağı anlamına gelir (Skip hariç ve Skip için tüm değerleri sonrası yok)
0

Verileri için "ViewData" eklendi ama ViewBag erişmek deneyin. ViewData'nın ViewBag ile farklı olduğunu bilmelisiniz. Bu nedenle bu satırı değiştirmeye çalıştığınızda: => ViewBag.leagueMemberList = leagueMemberSelectListItems için

ViewData["leagueMemberList"] = leagueMemberSelectListItems; 

;

+0

ah i I bilmiyordum değiştirdi ama şimdi bu hata atılıyor alıyorum: 'Üye' anahtarına sahip olan ViewData öğesi 'System.Collections.Generic.List'1 [[EloraCurling.Models.Member, EloraCurling, Version = 1.0. 0.0, Culture = neutral, PublicKeyToken = null]] 'ama' IEnumerable 'türünde olmalıdır. –

+0

belki de sonrası eylemden sonra ViewBag.leagueMemberList boştur. Değerleri tekrar viewbag'e yeniden atamanız gerekir. –

+0

ancak gönderdiğimde, HttpPost eylemine seçilen değerleri iletmeli miyim? –