У меня есть список организаций (CalledOrganizationSelectList), и одна из них называется (CalledOrganizationId). Я установил оба в моей ViewModel, но MVC / Razor неправильно отображает выпадающий список (то есть не устанавливает атрибут selected = "selected" для правильного элемента в раскрывающемся списке).
Существует обходной путь, который имеет еще меньше смысла. Я добавил нового члена в свою ViewModel и привязал раскрывающийся список к этому. Это отлично работает. До сих пор, когда он перестал работать ...
public class CallViewModel{
public int? CalledOrganizationId { get; set; }
public SelectList CalledOrganizationSelectList { get; set; }}
В моем контроллере:
var vm = new CallViewModel();
var calledOrganizationSelectList = new List<object>();
calledOrganizationSelectList.Add( new {Text="",Id=""});
calledOrganizationSelectList.AddRange(
db.MyOrganizations.OrderBy(x=>x.Name)
.Select(x => new { Text = x.Name, Id = x.Id.ToString()}).ToList());
var sl = new SelectList(calledOrganizationSelectList, "Id", "Text",
vm.CalledOrganizationId);
vm.CalledOrganizationSelectList = sl;
return View(vm);
На мой взгляд:
<div>CalledOrganizationId = @Model.CalledOrganizationId :
select list contains
<ul>@foreach (var itm in Model.CalledOrganizationSelectList)
{<li>Value: @itm.Value Text: @itm.Text Is Selected: @itm.Selected</li>}
</ul>
</div>
@Html.DropDownList("CalledOrganizationId", Model.CalledOrganizationSelectList)
В моей отрендеренной странице источник:
<div>CalledOrganizationId = 38 : select list contains
<ul>
<li>Value: Text: Is Selected: False</li>
<li>Value: 37 Text: rrr Is Selected: False</li>
<li>Value: 38 Text: sss1 Is Selected: True</li>
</ul>
</div>
<select data-val="true" data-val-number="The field CalledOrganizationId must be a number." id="CalledOrganizationId" name="CalledOrganizationId">
<option selected="selected" value=""></option>
<option value="37">rrr</option>
<option value="38">sss1</option> </select>
Я обошел эту проблему после того, как сначала вытащил то, что осталось от моих волос, а затем ввел новую переменную в мою ViewModel, которая, кажется, работает нормально.