2015-04-15 3 views
0

Я создал раскрывающийся список со значением, выбранным, но когда я иду, чтобы сохранить его, он возвращает нулевое значение модели.Model return null from drop down

Мой код для создания списка

var startYearList = from r in Model.Facility.Reports.OrderByDescending(x => x.Year) 
      select new SelectListItem 
      { 
       Text = r.Year == null ? "0000" : r.Year.ToString(), 
       Value = r.Year == null ? "1/1/0001" : "1/1/" + r.Year.ToString(), 
       Selected = (r.Year == Convert.ToInt32((Model.StartDate != null ? Model.StartDate.Value.ToString("yyyy") : "0001"))) 
      }; 

Мой код для заполнения выпадающего списка.

<div> 
     <b>Mailing Address:</b><br /> 
     <label>Address 1</label> 
     @Html.TextBoxFor(model => model.Address1)<br /> 
     <label>Address 2</label> 
     @Html.TextBoxFor(model => model.Address2)<br /> 
     <span class="dynLocation">@Html.TextBoxFor(model => model.Zipcode.Id)</span><br /> 
     <br /> 
     From @Html.DropDownListFor(model => model.StartDate.Value, startYearList)    
     to @Html.DropDownListFor(model => model.EndDate.Value, endYearList, "Current")    
    </div> 

Дата окончания может быть пустым

+0

Можете ли вы поделиться обижая «сохранить» фрагмент кода также, в том числе подписи? – Steve

+0

Вам необходимо привязать к свойству 'm => m.StartDate' (не' m => m.StartDate.Value'). И когда вы создаете 'SelectList', нет смысла устанавливать свойство' Selected' - его игнорируется –

ответ

0

Вы связывание вы выпадающий список с Value свойства Nullable<DateTime>, который является собственностью только для чтения (refer documentation) и не может быть установлен, когда вы размещаете назад. Вместо этого вам нужно привязать к свойству

@Html.DropDownListFor(m => m.StartDate, startYearList) 
@Html.DropDownListFor(m => m.EndDate, endYearList, "Current") 

сторона отмечает

  1. Вы должны генерировать SelectList в контроллере, а не вид и назначение его (предпочтительно) в виде модели собственности или a ViewBag Недвижимость
  2. Не пытайтесь установить Selected недвижимость SelectListItem. Вы являются обязательными к свойству модели и ее стоимости имущества , который определяет, Что выбрана (значение SelectListItemSelected просто игнорируется)
  3. HTML <label> элемент является доступность элемент, предназначенный для позволяет установить фокус к соответствующему контролю. Ваше использование label>Address 1</label> не связывает метку с элементом управления (вы можете просто использовать <span>Address 1</span>). Вместо того, чтобы использовать @Html.LabelFor(m => m.Address1, "Address 1") или добавить [Display(Name = "Address 1")] атрибут к свойству и использовать @Html.LabelFor(m => m.Address1)
+0

Документация по ссылке не работает. и когда я попытался изменить код так, как вы его рекомендовали, он не работает, он не имеет выбранного значения. – Michelle

+0

После того, как я посмотрел, я смог найти проблему. – Michelle

+0

Значение = r.Year == null? «01/01/0001»: «1/1 /» + r.Year.ToString() + «12:00:00 AM», – Michelle

-1

В тех случаях, когда значение модели обнуляемое я обнаружил, что использование Html.DropDownList работает лучше.

Скорее всего, вы увидите, что имя сгенерированного списка выбора «StartDate_Value» и как таковое не соответствует имени переменной в модели.

@Html.DropDownList("StartDate", startYearList) 
+0

, это проблема Value = r.Year == null? «01.01.10001»: «1/1 /» + r.Year.ToString() + «12:00:00 AM», – Michelle