Хотя [обязательное] поле списка не отображается, как требуется, а состояние модели не является действительным, поскольку оно равно нулю? - PullRequest
3 голосов
/ 13 мая 2010

У меня есть следующий код-

Вид-

<% 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 ]

6 голосов
/ 13 мая 2010

То, как я это делаю, заключается в том, что в моей модели представления есть свойство, к которому будет привязан раскрывающийся список (который можно обнулять), а затем есть отдельное свойство, содержащее все параметры раскрывающегося списка.

Свойства ViewModel

public int? CountryId { get; set; }
public IEnumerable<SelectListItem> CountryOptions { get; set; }

View

<label for="CountryId">Country:</label>
<%: Html.DropDownListFor(x => x.CountryId, Model.CountryOptions, "N/A")%>

Примечание. Строка "N/A" является пустым значением по умолчанию.

HTHS,
Charles

Ps. Это, конечно, с использованием ASP.NET MVC 2

0 голосов
/ 13 мая 2010

Я думаю, что это сбой, потому что он не может привести одно значение ("") в SelectListItem для помещения в список.Вы можете выбрать только одно значение DropDownSelectList.

Вы можете вместо этого сделать ChallengesAdminViewModel.DropDownSelectList типа string.Тогда это будет значение выбранной опции.SelectListItems предназначены для передачи параметров в представление, а не для анализа опубликованного результата.

0 голосов
/ 13 мая 2010

Простой ответ - удалить его из вашей модели и вместо этого передать через ViewData. Тогда ваша модель будет содержать член для значения, которое было выбрано из списка.

...