Я заметил, что мне кажется ошибка в asp.net MVC или просто я делаю что-то неправильно. В настоящее время я использую 1.0, поэтому, возможно, это то, что будет рассмотрено в версии 2.0. Но в любом случае, мы идем.
Когда у моей модели просмотра есть свойство, имя которого совпадает с объявленным идентификатором для выпадающего списка, выбранный элемент игнорируется, а отображаемый html ничего не выбрал. Не уверен, что я сделал что-то неправильно, но изменение имени идентификатора устраняет проблему. Я упростил пример, надеюсь, что это понятно, иначе, пожалуйста, дайте мне знать.
Вот мой взгляд, где объявленный идентификатор совпадает с моим списком в модели:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("IsMultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
И предоставленный Html
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<select id="IsMultipleServicers" name="IsMultipleServicers">
<option value="false">No</option>
<option value="true">Yes</option>
</select>
</td>
</tr>
</table>
Теперь сделаем небольшое изменение. Я изменю объявленный идентификатор на что-то другое.
Вот мой вид:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("MultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
И теперь вынесенный html:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<select id="IsMultipleServicers" name="IsMultipleServicers">
<option value="false">No</option>
<option selected="selected" value="true">Yes</option>
</select>
</td>
</tr>
</table>
Обратите внимание, что теперь я получаю выбранную опцию, которая будет вторым элементом в списке.
Вот моя ViewModel только для того, чтобы связать все вместе:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCProject.Models.ViewModels.Service
{
public class ServiceViewModel : ViewModel
{
public List<SelectListItem> IsMultipleServicers { get; set; }
}
}
Вот мое действие:
[AcceptVerbs(HttpVerbs.Get)]
public virtual ActionResult Service()
{
return View(new ServiceViewModel()
{
IsMultipleServicers = BuildBooleanSelectList(true)
};
}
private List<SelectListItem> BuildBooleanSelectList(bool isTrue)
{
List<SelectListItem> list = new List<SelectListItem>();
if (isTrue)
{
list.Add(new SelectListItem() { Selected = false, Text = "No", Value = "false" });
list.Add(new SelectListItem() { Selected = true, Text = "Yes", Value = "true" });
}
else
{
list.Add(new SelectListItem() { Selected = true, Text = "No", Value = "false" });
list.Add(new SelectListItem() { Selected = false, Text = "Yes", Value = "true" });
}
return list;
}