2015-07-15 3 views
1

У меня есть свойство с типом Datetime, и в окне редактирования пользователь выбирает это свойство с помощью Html.DropDownListFor, проблема в том, что Html.DropDownListFor не получает свойство Selected в SelectList, чтобы выбрать значение. Я знаю, что это потому, что значение свойства имеет другое значение, но я работает, когда я изменить имя атрибута:ASP.NET MVC 5 Html.DropDownListFor с datetime не работает SelectList selected

Values:

CancellationDate = {9/10/2016 12:00:00 AM} 
CancellationDateListItem = new List<SelectListItem> { 
    new SelectListItem 
       { 
        Selected = true, 
        Text = "09/10/2016", 
        Value = "09/10/2016", 
        Disabled = false, 
        Group = null 
       }, 
    new SelectListItem 
       { 
        Selected = true, 
        Text = "09/11/2016", 
        Value = "09/11/2016", 
        Disabled = false, 
        Group = null 
       } 
}; 

CancellationDateListSelected = new SelectList(CancellationDateListItem); 

CancellationDateListWithStringSelectedValue = new SelectList(CancellationDateListItem, CancellationDate.ToString("MM/dd/yyyy")); 

CancellationDateListWithDateTimeSelectedValue = new SelectList(CancellationDateListItem, CancellationDate); 

эти примеры doen't работы:

@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListSelected) 

@Html.DropDownList("CancellationDate", CancellationDateListSelected) 

@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListWithStringSelectedValue) 

@Html.DropDownListFor(model => model.CancellationDate, CancellationDateListWithDateTimeSelectedValue) 

но, очевидно, эта работа хорошо:

@Html.DropDownList("OtherName", CancellationDateListWithStringSelectedValue) 

Я полагаю/знаю, что это по типу DateTime. Могу ли я заставить в DropDownListFor получить свойство Selected в SelectList, чтобы выбрать параметр?

ответ

1

Я считаю, что это может быть полезно. Причина, по которой он не привязывает значение, - это вызывать новый элемент, как показано ниже, при установке значений.

new SelectListItem 
    { 
     .... 
    }; 

Вместо этого попробуйте использовать {get; set;} в определении вашего класса. Затем, в вашем контроллере, или где в реализации, установите нужные значения.

DateTime dt {get;set;} 
    ... 

    dt = "9/10/2015"; 
1

Попытка установить свойство Selected из SelectListItem не имеет смысл при привязке к свойству потому, что его значение свойства, которое определяет выбранное значение. Так как значение CancellationDate «9/10/2016 12:00:00 AM», которое не соответствует ни одному из значений в вашем списке выбора («09/10/2016» и «09/1/2016») , тогда первый вариант всегда будет выбран (потому что что-то должно быть).

Ваш метод GET должен включать

List<string> dates = new List<string>() { "09/10/2016", "09/11/2016" }; 
model.CancellationDateListItem = new SelectList(dates); 
model.CancellationDate = "09/11/2016"; 
return View(model); 

и в представлении

@Html.DropDownListFor(m=> m.CancellationDate, Model.CancellationDateListItem) 

Поскольку значение CancellationDate совпадает со значением второго варианта, то это значение будет выбрано.

+0

Хорошо, но могу ли я заставить в DropDownListДля получения свойства Выбрано в SelectList, чтобы выбрать параметр? –

+0

Нет, поскольку его значение «CancellationDate», которое определяет то, что выбрано (свойство 'Selected'' SelectListItem' игнорируется) - так работает привязка модели. Причина, по которой '@ Html.DropDownList (« OtherName », Model.CancellationDateListItem)' будет работать, заключается в том, что вы не привязываетесь к свойству вашей модели. –

Смежные вопросы