J'utilise @html.EditorFor
pour rendre mon modèle en mode édition et aucune liste déroulante n'est rendue.
Voici mon ViewModel:
public class RiskAutoViewModel
{
public RiskAutoViewModel()
{
VehicleMakeList = new SelectList(new List<VehicleMake>() { new VehicleMake() { Id = 1, Name = "Renault" }, new VehicleMake() { Id = 2, Name = "Peugeot" } });
}
public int NoClaimsDegree { get; set; }
public int VehicleValue { get; set; }
public int EngineCapacity { get; set; }
public int VehicleMake { get; set; }
public SelectList VehicleMakeList { get; set; }
}
VehicleMake
est rendu sous la forme d'un textbox et VehicleMakeList
n'est pas rendu du tout. Ce que j'aimerais, c'est rendre une liste déroulante contenant la liste de VehicleMake
et définir sa valeur sur celle de VehicleMake
.
Lorsque le modèle est enregistré, VehicleMake doit être défini sur la valeur de l'élément sélectionné dans la liste.
Comment puis je faire ça ?
MODIFIER
Comme je ne peux taper aucun code dans les zones de commentaire ci-dessous, je vais écrire un suivi ici.
J'ai fini par créer un EditorTemplate tel que:
<div class="editor-label">
@Html.LabelFor(model => model.VehicleMakeList)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
@Html.ValidationMessageFor(model => model.VehicleMake)
</div>
Et maintenant, mon ViewModel ressemble à ceci:
[Required]
[ScaffoldColumn(false)]
public int VehicleMake { get; set; }
[Display(Name = "Marque", Prompt = "Marque", Description = "Renseigne la marque du véhicule")]
public SelectList VehicleMakeList { get; set; }
Cela me conduit maintenant à une autre question (peut-être que je devrais le faire dans un autre fil), mais j'ai en réalité DEUX listes déroulantes dans cette vue. Et les éléments de la deuxième liste déroulante sont fondamentalement dynamiques et dépendent de l'élément sélectionné dans la première liste déroulante. C'est très facile à faire avec AJAX mais avec MVC, je suis perdu. Comment les gens font-ils cela habituellement?
Malheureusement, il n'y a pas de support intégré pour les listes déroulantes dans l'éditeur de modèles. Vous pouvez écrire votre propre modèle d'éditeur ou utiliser la méthode d'assistance HTML @Html.DropDownListFor()
dans votre affichage.
La réponse de Darin Dimitrov à cette question peut vous guider tout au long du processus de création d'un modèle d'éditeur pour les listes déroulantes, si vous le souhaitez.
Le moyen le plus rapide pour que cela fonctionne est de le faire à votre avis:
@Html.EditorFor(model => model.NoClaimsDegree)
@Html.EditorFor( model => model.VehicleValue )
@Html.EditorFor( model => model.EngineCapacity )
@Html.DropDownListFor( model => model.VehicleMake, Model.VehicleMakeList, "Select a make" )
Je pense que le modèle pour dropdownlist devrait être:
public List<System.Web.Mvc.SelectListItem> VehicleMakeList {get; set;}
Et initialisé comme:
VehicleMakeList = new List<System.Web.Mvc.SelectListItem>()
{
new SelectListItem { Value = "1", Text = "Renault" },
new SelectListItem { Value = "2", Text = "Peugeot" }
};
Ou en utilisant une source de données:
VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET or any supported external source*/
.Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
.ToList();
Vue:
@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
La liste déroulante de liaisons est très délicate dans MVC Vous pouvez le faire avec ceci dans votre contrôleur pour obtenir toutes vos listes de villes le mettre dans viewBag
Créer
ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");
user.CityID si vous êtes dans Edit afin que sur edit, sélectionnez la ville
ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);
dans votre vue il suffit de faire cette astuce
@Html.DropDownList("CityId", "Select")
c'est la façon la plus simple que je connaisse ....
liste déroulante de liaison est facile. code comme suit
public ActionResult BindWithModel()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem
{ Text = "Select Category", Value = "0",
Selected = true });
items.Add(new SelectListItem
{ Text = "Beverages", Value = "1" });
items.Add(new SelectListItem
{ Text = "Condiments", Value = "2" });
items.Add(new SelectListItem
{ Text = "Confections", Value = "3" });
items.Add(new SelectListItem
{ Text = "Dairy Products", Value = "4" });
items.Add(new SelectListItem
{ Text = "Grains/Cereals", Value = "5" });
items.Add(new SelectListItem
{ Text = "Meat/Poultry", Value = "6" });
items.Add(new SelectListItem
{ Text = "Produce", Value = "7" });
items.Add(new SelectListItem
{ Text = "Seafood", Value = "8" });
var model = new CategoryModel()
{
lstCategory = items,
selected = 1
};
return View(model);
}
@model BindMvcDropdownList.Models.CategoryModel
<h1>Bind MVC DropDownList with Model</h1>
@Html.DropDownListFor(x => x.selected, Model.lstCategory)
code extrait d'ici http://dotnetmentors.com/mvc/how-to-bind-dropdownlist-in-asp-net-mvc-application.aspx