我可以成功填写表单并将数据提交到数据库。但是,如果模型未通过验证,则表单上的下拉列表不会显示所选值。
我可以在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 })
显示为:
答案 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);
}