Хотя [обязательное] поле списка не отображается, как требуется, а состояние модели не является действительным, поскольку оно равно нулю?
У меня есть следующий код
Посмотреть-
<% Html.BeginForm(); %>
<div>
<%= Html.DropDownList("DropDownSelectList", new SelectList( Model.DropDownSelectList, "Value", "Text"))%>
эксплуатации контроллеров
public ActionResult Admin(string apiKey, string userId)
{
ChallengesAdminViewModel vm = new ChallengesAdminViewModel();
vm.ApiKey = apiKey;
vm.UserId = userId;
vm.DropDownSelectList = new List<SelectListItem>();
vm.DropDownSelectList.Add(listItem1);
vm.DropDownSelectList.Add(listItem2);
vm.DropDownSelectList.Add(listItem3);
vm.DropDownSelectList.Add(listItem4);
vm.DropDownSelectList.Add(listItem5);
vm.DropDownSelectList.Add(listItem6);
vm.DropDownSelectList.Add(listItem7);
}
[HttpPost]
public ActionResult Admin(ChallengesAdminViewModel vm)
{
if (ModelState.IsValid)//Due to the null dropdownlist gives model state invalid
{
}
}
ViewModel-
public class ChallengesAdminViewModel
{
[Required]
public string ApiKey { get; set; }
[Required]
public string UserId { get; set; }
public List<SelectListItem> DropDownSelectList { get; set; }
}
Я не знаю, почему это все еще требует список, хотя не требуется. Я хочу иметь только два атрибута, как требуется. Поэтому я хотел знать, как я могу объявить или изменить этот список, чтобы он не был обязательным, и чтобы мое модельное состояние действовало.
3 ответа
Для этого у меня есть свойство в моей модели представления, к которому будет привязан раскрывающийся список (который можно обнулять), а затем есть отдельное свойство, которое содержит все параметры раскрывающегося списка.
Свойства ViewModel
public int? CountryId { get; set; }
public IEnumerable<SelectListItem> CountryOptions { get; set; }
Посмотреть
<label for="CountryId">Country:</label>
<%: Html.DropDownListFor(x => x.CountryId, Model.CountryOptions, "N/A")%>
Обратите внимание "N/A"
строка является пустым значением по умолчанию.
HTHS,
Чарльз
Ps. Это, конечно, с использованием ASP.NET MVC 2
Простым ответом было бы удалить его из вашей модели и вместо этого передать его через ViewData. Тогда ваша модель будет содержать член для значения, которое было выбрано из списка.
Я думаю, что это терпит неудачу, потому что это не может принуждать единственное значение (""
) в SelectListItem
положить в список. Вы можете иметь только один DropDownSelectList
значение выбрано.
Вы можете попробовать сделать свой ChallengesAdminViewModel.DropDownSelectList
вместо типа строки. Тогда это будет значение выбранной опции. SelectListItems
предназначены для отправки параметров в представление, а не для анализа опубликованного результата.