Le moyen le plus simple de créer une liste déroulante en cascade dans ASP.NET MVC 3 avec C #

Je veux créer deux DropDownList dans une cascade en utilisant MVC3 (de préférence Razor ) avec C# .

Je voudrais avoir une liste déroulante où vous pouvez choisir l’année et une autre où vous pouvez choisir un ensemble de mois spécifique en fonction de l’année sélectionnée.

Disons que c’est simple. Lorsque je choisis l’année en cours (2011) dans la liste déroulante «année», la liste déroulante «mois» est renseignée avec les mois jusqu’au mois en cours (mars). Pour les autres cas (autres années), aucune ressortingction n’est donnée. En outre, il serait bon de “bloquer” la liste déroulante “mois” avant de sélectionner un élément de la liste déroulante “année”.

J’ai déjà cherché sur Internet certaines solutions, en utilisant jQuery ou même des approches maison, mais elles font toutes référence à des versions antérieures de MVC et certaines commandes sont obsolètes dans MVC3 .

Comme toujours, vous commencez avec un modèle:

 public class MyViewModel { public int? Year { get; set; } public int? Month { get; set; } public IEnumerable Years { get { return Enumerable.Range(2000, 12).Select(x => new SelectListItem { Value = x.ToSsortingng(), Text = x.ToSsortingng() }); } } } 

puis un contrôleur:

 public class HomeController : Controller { public ActionResult Index() { var model = new MyViewModel(); return View(model); } public ActionResult Months(int year) { if (year == 2011) { return Json( Enumerable.Range(1, 3).Select(x => new { value = x, text = x }), JsonRequestBehavior.AllowGet ); } return Json( Enumerable.Range(1, 12).Select(x => new { value = x, text = x }), JsonRequestBehavior.AllowGet ); } } 

et enfin une vue:

 @model AppName.Models.MyViewModel @Html.DropDownListFor( x => x.Year, new SelectList(Model.Years, "Value", "Text"), "-- select year --" ) @Html.DropDownListFor( x => x.Month, Enumerable.Empty(), "-- select month --" )  

De toute évidence, vous remarquerez que dans mon exemple, j’ai codé toutes les valeurs. Vous devriez améliorer cette logique en utilisant des notions telles que l’année en cours, le mois en cours, et peut-être même récupérer ces valeurs à partir d’un référentiel, etc.