Я заметил, что мне кажется ошибкой в 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;
}