There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key country
In your action change ViewBag.countrydrop = item8
to ViewBag.country = item8;
and in View write like this:
@Html.DropDownList("country",
(IEnumerable<SelectListItem>)ViewBag.country,
"Select country")
Actually when you write
@Html.DropDownList("country", (IEnumerable)ViewBag.country, "Select country")
or
Html.DropDownList("country","Select Country)
it looks in for IEnumerable<SelectListItem>
in ViewBag
with key country, you can also use this overload in this case:
@Html.DropDownList("country","Select country") // it will look for ViewBag.country and populates dropdown
See Working DEMO Example
If you were using DropDownListFor
like this:
@Html.DropDownListFor(m => m.SelectedItemId, Model.MySelectList)
where MySelectList
in the model was a property of type SelectList
, this error could be thrown if the property was null
.
Avoid this by simple initializing it in constructor, like this:
public MyModel()
{
MySelectList = new SelectList(new List<string>()); // empty list of anything...
}
I know it's not the OP's case, but this might help someone like me which had the same error due to this.
Note that a select list is posted as null, hence your error complains that the viewdata property cannot be found.
Always reinitialize your select list within a POST action.
For further explanation: Persist SelectList in model on Post