Как разрешить исключение htmldropdownfor nullreference
У меня есть выпадающий список MVC Razor, который бросает "ссылка на объект не установлена на экземпляр объекта", когда я делаю отправку. Я совершенно не знаю, как возникает эта ошибка.
В моей модели у меня есть:
public int BankId { get; set; } public List<SelectListItem> Banks { get; set; }
Метод, который заполняет SelectListItem как :
public static List<SelectListItem> PopulateBank() { List<SelectListItem> items = new List<SelectListItem>(); using (SqlConnection conn = new SqlConnection(Helpers.DatabaseConnect)) { SqlCommand cmd = new SqlCommand("SELECT BankId,BankName FROM Bank WHERE Active=" + Convert.ToInt32(Helpers.parameters.active) + "", conn); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { items.Add(new SelectListItem { Text = Convert.ToString(dr["BankName"]), Value = Convert.ToString(dr["BankId"]) }); } conn.Close(); } return items; }
Тогда в контроллере у меня есть :
public ActionResult Bank () { Models.Employee.Registration bank = new Models.Employee.Registration(); bank.Banks = PopulateBank(); return View(bank); }
Когда я нажимаю submit BankId не получает никакого значения:
[HttpPost] public ActionResult Bank(FormCollection formcollection) { try { Models.Employee.Registration bank = new Models.Employee.Registration(); bank.Banks = PopulateBank(); bank.BankId = Convert.ToInt32(formcollection["BankId"]); if (ModelState.IsValid) { using (SqlConnection conn1 = new SqlConnection(Helpers.DatabaseConnect)) { SqlCommand cmd = new SqlCommand("SaveEmployeeBankDetail", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@EmployeeNumber", bank.EmployeeNumber); cmd.Parameters.AddWithValue("@BankId", bank.BankId); conn.Open(); cmd.ExecuteNonQuery(); } } catch (Exception) { ViewBag.ErrorMessage = Helpers.Messages.GENERAL_ERROR; return View(); } return RedirectToAction("Index"); }
В Bank.cshtml у меня есть
<div class="col-sm-9"> <span class="input-icon"> @Html.DropDownListFor(m => m.BankId, Model.Banks, "", htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.BankId, "", new { @class = "text-danger" }) <i class="ace-icon fa fa-bank blue"></i> </span> </div>
Что я уже пробовал:
Я искал некоторые источники в интернете , предложения заключаются в том, что мне нужно повторно заполнить DropDownListFor в этом посте . Что же касается самого модель я уже передал его обратно в представление, то есть в GET-версии общественный банк ActionResult Пожалуйста, кто-нибудь может помочь мне в том, как я могу повторно инициализировать это модель с ценностями.
Кроме того, есть ли что-нибудь, что я должен сделать в Bank.cshtml по этому поводу ?