Nie ma elementu ViewData typu „IEnumerable ”, który ma klucz „CategoryID”


to jest moja akcja kontrolera
public ActionResult AddNewPost(string subName)
{
ViewBag.CategoryID = new SelectList(from c in db.Categories where c.Status == true select c, "CategoryID", "CategoryName");
return View();
}

w zasięgu wzroku mam wypełnione rozwijane menu, takie jak
<td>
@Html.DropDownList("CategoryID", "-- Select --")
</td>

ale kiedy próbuję uzyskać dostęp do wartości rozwijanej w kontrolerze, otrzymuję ten błąd
„Nie ma elementu ViewData typu 'IEnumerable', który ma klucz 'CategoryID'.”
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj:
//In Controller Action
public ActionResult AddNewPost(string subName)
{
ViewBag.Cats = new SelectList(db.Categories
.Where(c=> c.Status)
.Select(c=> new {CategoryID = c.YourCatIdField,
CategoryName = c.YourCatNameField},
"CategoryID", "CategoryName");
return View();
}//In View
@Html.DropDownList("myCatId",
(SelectList)(ViewData["Cats"]), "-- Select --")//Controller
[HttpPost]
public ActionResult AddNewPost(string subName, int myCatId)
{
//myCatId should bring the selected value here
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

widok powinien być taki
@Html.DropDownListFor(item =>Model.CategoryID,ViewBag.CategoryId as SelectList,"-- Select --")
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj:
[httpGet]public ActionResult AddNewPost(string subName)
{
ViewBag.CategoryID = new SelectList(from c in db.Categories where c.Status == true select c, "CategoryID", "CategoryName");
return View();
}
[HttpPost]
public ActionResult AddNewPost(string subName,ur model)
{
model.add(model);
ViewBag.CategoryID = new SelectList(from c in db.Categories where c.Status == true select c, "CategoryID", "CategoryName");
return View();
}

W bazie danych ustaw CategoryId „zezwalaj na wartości null”, aw pliku modelu zaakceptuj, że ma wartość null
Były:
W modelu
public int? CategoryId {get;set;}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się