模型从下拉列表返回null

时间:2015-04-15 22:17:53

标签: asp.net-mvc-3 html.dropdownlistfor

我创建了一个选定值的下拉列表,但是当我去保存它时,它会向模型返回一个空值。

我创建列表的代码

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>

结束日期可以为空

2 个答案:

答案 0 :(得分:0)

您将下拉列表绑定到Value Nullable<DateTime>属性@Html.DropDownListFor(m => m.StartDate, startYearList) @Html.DropDownListFor(m => m.EndDate, endYearList, "Current") 属性,这是一个只读属性(refer documentation),并且在您回发时无法设置。相反,您需要绑定到属性

SelectList

旁注

  1. 您应该在控制器中生成ViewBag,而不是 查看,并将其分配给(最好)视图模型属性或 Selected财产
  2. 请勿尝试设置SelectListItem的{​​{1}}属性。您 绑定到模型属性及其属性的值 确定选择的是什么(Selected的值 SelectListItem只是被忽略了)
  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)

答案 1 :(得分:-1)

如果模型值可以为空,我发现使用Html.DropDownList效果更好。

您可能会发现生成的选择列表的名称是&#34; StartDate_Value&#34;因此与模型中的变量名称不对应。

 @Html.DropDownList("StartDate", startYearList)