System.InvalidOperationException: 'Нет элемента ViewData типа' IEnumerable <SelectListItem>', который имеет ключ' items '.' - PullRequest
0 голосов
/ 03 февраля 2020

Я новичок в c# и пытаюсь создать простое MVC веб-приложение /// Это create.cs html

<div class="form-group">
    @Html.LabelFor(model => model.MembershipID, "MembershipID", htmlAttributes: new 
    { @class = "control-label col-md-2" })
    <div class="col-md-10">
       @Html.DropDownList("items",ViewData["items"] as IEnumerable<SelectListItem>, new { @class 
    = "form-control" })
       @Html.ValidationMessageFor(model => model.MembershipID, "", new { @class = "text-danger" 
      })
    </div>
</div>

, и это мой контроллер ученика

public ActionResult Create()
{
     List<SelectListItem> items = new List<SelectListItem>();
     items.Add(new SelectListItem { Text = "Day", Value = "0" });
     items.Add(new SelectListItem { Text = "Month", Value = "1" });
     items.Add(new SelectListItem { Text = "Direct-Debit", Value = "2" });
     items.Add(new SelectListItem { Text = "Other", Value = "3" });

     ViewData["MembershipID"] = items;
     return View();
}

[HttpPost] 
public ActionResult Create(Student student) { 
    try { // TODO: Add insert logic here 
        using (BlackBeardDBEntities db = new BlackBeardDBEntities()) { 
            db.Students.Add(student); 
            db.SaveChanges(); 
        } 
        return RedirectToAction("Index"); 
     } catch { 
        return View(); 
     } 
}

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Пара вещей:

Как уже упоминалось в комментариях, измените ViewData["MembershipID"] = items; на ViewData["items"] = items; в вашем Controller методе

Во-вторых: вам нужно отобразить selectlist пункт как:

@Html.DropDownList("items",ViewData["items"] as List<SelectListItem>, new { @class="form-control" })
0 голосов
/ 03 февраля 2020

В вашем контроллере вы объявляете ViewData как ViewData ["MembershipId"] , и вы используете ViewData ["items"] , что неверно. Убедитесь, что ключ вашего ViewData одинаков в обоих случаях. В контроллере замените ViewData ["MembershipId"] на ViewData ["items"]. Кроме того, вы сохраняете данные в viewdata как List и используете в качестве IEnumerable . Внесите в него изменения, а затем попробуйте собрать.

0 голосов
/ 03 февраля 2020

ViewData["items"] не заявлено в контроллере. Для доступа к этим данным вам нужно изменить

@Html.DropDownList("items",ViewData["items"] 

на

@Html.DropDownList("items",new SelectList((IEnumerable<SelectListItem>) ViewData["MembershipID"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...