模型从下拉列表中返回 null
Model returning null from drop down
我创建了一个下拉列表,其中选择了一个值,但是当我去保存它时,它 returns 模型的空值。
我创建列表的代码
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>
结束日期可以为空
在模型值可以为空的情况下,我发现使用 Html.DropDownList 效果更好。
您可能会发现生成的 select 列表的名称是 "StartDate_Value",因此与模型中的变量名称不对应。
@Html.DropDownList("StartDate", startYearList)
您将下拉列表绑定到 Nullable<DateTime>
的 Value
属性,这是只读的 属性 (refer documentation),当您post回来了。相反,您需要绑定到 属性
@Html.DropDownListFor(m => m.StartDate, startYearList)
@Html.DropDownListFor(m => m.EndDate, endYearList, "Current")
旁注
- 您应该在控制器中生成
SelectList
,而不是
视图,并将其分配给(最好)视图模型 属性 或
ViewBag
属性
- 请勿尝试设置
SelectListItem
的 Selected
属性。你
绑定到模型 属性 及其 属性 的值
确定选择的内容(Selected
的值
SelectListItem
被忽略)
- A 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)
我创建了一个下拉列表,其中选择了一个值,但是当我去保存它时,它 returns 模型的空值。
我创建列表的代码
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>
结束日期可以为空
在模型值可以为空的情况下,我发现使用 Html.DropDownList 效果更好。
您可能会发现生成的 select 列表的名称是 "StartDate_Value",因此与模型中的变量名称不对应。
@Html.DropDownList("StartDate", startYearList)
您将下拉列表绑定到 Nullable<DateTime>
的 Value
属性,这是只读的 属性 (refer documentation),当您post回来了。相反,您需要绑定到 属性
@Html.DropDownListFor(m => m.StartDate, startYearList)
@Html.DropDownListFor(m => m.EndDate, endYearList, "Current")
旁注
- 您应该在控制器中生成
SelectList
,而不是 视图,并将其分配给(最好)视图模型 属性 或ViewBag
属性 - 请勿尝试设置
SelectListItem
的Selected
属性。你 绑定到模型 属性 及其 属性 的值 确定选择的内容(Selected
的值SelectListItem
被忽略) - A 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)