MVC DropDownListFor Null Values
У меня возникают проблемы с использованием dropdownlistfor htmlhelper в MVC. Когда происходит обратная связь, ничего не выбрано, а значения в модели для списка и выбранный элемент равны нулю.
Вот мои модели:
namespace MvcTestWebApp.Models
{
public class Customer
{
public string name { get; set; }
public List<SelectListItem> members { get; set; }
public Member selected { get; set; }
}
public class Member
{
public string name { get; set; }
}
}
Контроллер:
namespace MvcTestWebApp.Models
{
public class CustomerController : Controller
{
//
// GET: /Customer/
public ActionResult Index()
{
Customer cust = new Customer() { name = "Cust1" };
cust.members = new List<SelectListItem>();
cust.members.Add(new SelectListItem(){Text = "Bob"} );
cust.members.Add(new SelectListItem(){Text = "Dave"} );
return View(cust);
}
[HttpPost]
public ActionResult Index(Customer customer)
{
return View();
}
}
}
И Просмотр:
@model MvcTestWebApp.Models.Customer
@{
ViewBag.Title = "Customer";
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title> Index </title>
</head>
<body>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer Data</legend>
@Html.HiddenFor(model => model.name)
@Html.DropDownListFor(model => model.selected, Model.members, "--Select--")
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
</body>
</html>
Когда я выбираю что-то из списка выбора и нажимаю кнопку "Отправить", возвращается null:
![nullselect]()
Может ли кто-нибудь пролить свет на то, что я делаю неправильно?
Ответы
Ответ 1
Проблема, с которой вы работаете, заключается в том, что MVC не знает, как перевести выбранное значение выпадающего списка (который является строкой) объекту Member.
Что вам нужно сделать, это иметь свойство selectedValue, которое используется для установки значения в раскрывающемся списке и получения возвращаемого значения.
Новый класс клиентов:
public class Customer
{
public string name { get; set; }
public List<SelectListItem> members { get; set; }
public string selectedValue { get; set; }
public Member selected { get; set; }
}
Обновлено Управление списком раскрывающихся списков:
@Html.DropDownListFor(model => model.selectedValue, Model.members, "--Select--")
Это вернет выбранное значение из раскрывающегося списка в свойство selectedValue.
Причина, по которой ваш список членов возвращается null, заключается в том, что HTML не возвращает параметры в выпадающем списке, он возвращает только выбранное значение. Поэтому, когда информация поступает в метод, ему присваиваются только значения входных форм.
Если вы хотите увидеть, какая информация будет отправлена обратно на сервер, вы можете использовать консоль разработчика и захватить обратный запрос Http
и/или
Вы можете добавить FormCollection collection
к параметрам действия контроллера, чтобы узнать, какую информацию использует MVC для создания объектов, которые он передает методам.
[HttpPost]
public ActionResult Index(Customer customer, FormCollection collection)
{
return View();
}
Ответ 2
cust.members.Add(new SelectListItem(){Text = "Bob"} );
cust.members.Add(new SelectListItem(){Text = "Dave"} );
Попробуйте установить значение:
cust.members.Add(new SelectListItem(){Value = "Bob", Text = "Bob"} );
cust.members.Add(new SelectListItem(){Value = "Dave", Text = "Dave"} );
Ответ 3
используйте jQuery preend, чтобы устранить проблему с легкостью.
$("#idOfSelectTag").prepend('
<option selected="selected" value="null">
-- Select School --
</option>
');