Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>As always you start with a model:</p> <pre><code>public class MyViewModel { public int? Year { get; set; } public int? Month { get; set; } public IEnumerable&lt;SelectListItem&gt; Years { get { return Enumerable.Range(2000, 12).Select(x =&gt; new SelectListItem { Value = x.ToString(), Text = x.ToString() }); } } } </code></pre> <p>then a controller:</p> <pre><code>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 =&gt; new { value = x, text = x }), JsonRequestBehavior.AllowGet ); } return Json( Enumerable.Range(1, 12).Select(x =&gt; new { value = x, text = x }), JsonRequestBehavior.AllowGet ); } } </code></pre> <p>and finally a view:</p> <pre><code>@model AppName.Models.MyViewModel @Html.DropDownListFor( x =&gt; x.Year, new SelectList(Model.Years, "Value", "Text"), "-- select year --" ) @Html.DropDownListFor( x =&gt; x.Month, Enumerable.Empty&lt;SelectListItem&gt;(), "-- select month --" ) &lt;script type="text/javascript"&gt; $('#Year').change(function () { var selectedYear = $(this).val(); if (selectedYear != null &amp;&amp; selectedYear != '') { $.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) { var monthsSelect = $('#Month'); monthsSelect.empty(); $.each(months, function (index, month) { monthsSelect.append($('&lt;option/&gt;', { value: month.value, text: month.text })); }); }); } }); &lt;/script&gt; </code></pre> <p>Obviously you will notice that in my example I have hardcoded all the values. You should improve this logic by using notions like current year, current month, probably even fetch those values from a repository, etc... but for the purpose of the demonstration this should be enough to put you on the right track.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload