Zauważyłem, co wydaje mi się błąd w asp.net MVC lub po prostu robię coś nie tak. Obecnie używam 1.0, więc może to jest coś, co zostanie omówione w wydaniu 2.0. Ale tak czy inaczej, zaczynamy.DropDownList ustawienie wybranego elementu w asp.net MVC
Gdy mój model widoku ma właściwość, która ma taką samą nazwę, jak deklarowany identyfikator dla rozwijanej listy, wybrany element jest ignorowany, a renderowany HTML nie zawiera niczego. Nie jestem pewien, czy coś zrobiłem źle, ale zmiana nazwy identyfikatora rozwiązuje problem. Uprośniłem przykład, mam nadzieję, że jest jasne, w przeciwnym razie proszę dać mi znać.
Oto mój widok gdzie deklarowana ID jest taka sama jak nazwa mojej liście w modelu:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("IsMultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
a renderowane 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>
Teraz pozwala zrobić mała zmiana. Zmienię zadeklarowany identyfikator na coś innego.
Oto moim zdaniem:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("MultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
A teraz wytopione 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>
Zauważ, że teraz mam wybraną opcję, który byłby drugi element na liście.
Oto moje ViewModel prostu związać wszystko razem:
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; }
}
}
Oto moje działanie:
[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;
}
Chciałbym, żeby było to bardziej oczywiste ... Ale teraz ma sens. Dzięki – ppumkin
polecam wszystkim: http://www.c-sharpcorner.com/UploadFile/4d9083/creating-simple-cascading-dropdownlist-in-mvc-4-using-razor/ – Umitk