The code was working, but I am not getting the error:
There is no ViewData item of type 'IEnumerable' that has the key 'Register.CountryId'
In view:
@using (Html.BeginForm((string)ViewBag.FormAction, "NMPAccount", new { @id = "myForm", @name = "myForm" }))
@Html.LabelFor(m => m.Register.CountryId)
@Html.DropDownListFor(m => m.Register.CountryId, Model.Register.CountryList,
new { @id = "CountryList" })
@Html.ValidationMessageFor(m => m.Register.CountryId)
}
In controller:
[AllowAnonymous]
public ActionResult Register() {
var registerViewModel = new RegisterViewModel();
registerViewModel.Initalize();
return View("Register", registerViewModel);
}
[AllowAnonymous]
[HttpPost]
public ActionResult Register(RegisterViewModel model) {
if (!ModelState.IsValid) {
model.Initalize();
ModelState.AddModelError(string.Empty, "");
return View("Register", model);
}
if (ModelState.IsValid && model.Register != null) {
if (RegisterViewModel.RegisterNewUser(model.Register))
return RedirectToAction("RegisterSuccess");
else
ModelState.AddModelError("", NMPAccountResource.Failed);
}
in ViewModel:
public class RegisterViewModel {
public RegisterViewModel() {
Register = new RegisterModel();
}
public RegisterModel Register { get; set; }
public void Initalize() {
var registerUser = new RegisterUser();
IList<CountryCodes> couList = Utilities.GetCountryList(languageId);
var countryList = (from data in couList
select new CustomItem() {
Id = data.CountryCodesId,
Description = data.CountryName
}).ToList();
if (countryList.Count > 0) {
countryList[0].Id = null;
}
var clist = new SelectList(countryList, "Id", "Description");
Register.CountryList = clist;
}
** Register Model**:
public string CountryId { get; set; }
public IEnumerable<SelectListItem> CountryList { get; set; }
I want to do this from "view model".
I have searched StackOverflow, but I have not found an answer to solve my problem.
I can't add this as a comment, but you need to return a view model in the POST version of the
Register
ActionYour code might have been working previously if the condition
!ModelState.IsValid
was TRUE. Maybe you've not got passed this check, and the code below fails at run-time.