html.dropdown未保留选定的值

时间:2014-06-25 21:54:48

标签: html asp.net-mvc asp.net-mvc-4 razor

我可以成功填写表单并将数据提交到数据库。但是,如果模型未通过验证,则表单上的下拉列表不会显示所选值。

我可以在html中看到下拉输入的值是正确的 - 但是没有向用户显示该值。如何让下拉列表显示值?

示例:

HTML渲染:

<select class="field panel-field" id="TempAvailability_0__AvailabilityMinimumHours"     name="TempAvailability[0].AvailabilityMinimumHours" value="36"><option value=""></option>
<option value="40">40</option>
<option value="39">39</option>
<option value="38">38</option>
<option value="37">37</option>
<option value="36">36</option>
<option value="35">35</option>
</select>

查看:

string AvailabilityMinimumHours = "";
if(Model != null)
{
    AvailabilityMinimumHours = Model.AvailabilityMinimumHours.ToString();
}
 @Html.DropDownList("TempAvailability[0].AvailabilityMinimumHours", (IEnumerable<SelectListItem>)this.ViewBag.HoursList, new { @class = "field panel-field", @value=AvailabilityMinimumHours })

显示为:

minhours

1 个答案:

答案 0 :(得分:0)

最后。经过几天的拔毛,我已经想到了这一点。关键是在控制器中设置所选值,其中构建了选择列表。

我必须通过传入值来更改控制器,然后在构建时在列表中设置选中。

        private IEnumerable<SelectListItem> GetHoursList(byte? hour)
    {
        List<SelectListItem> hoursList = new List<SelectListItem>();
        var selected = false;
        hoursList.Add(new SelectListItem() { Value = "", Text = "" });
        for (int i = 40; i >= 5; --i)
        {
            if (hour == i)
            {
                selected = true;
            }
            hoursList.Add(new SelectListItem() { Value = i.ToString(), Text = i.ToString(), Selected = selected });
            selected = false;
        }
        return hoursList;
    }

        [HttpPost]
    public ActionResult ShowAvailability(Availability availability)
    {
        this.ViewBag.HoursList = this.GetHoursList(availability.AvailabilityMinimumHours);
        return PartialView("_AvailabilityPartial", availability);
    }