猿问

使用C#在ASP.NET MVC 3中创建级联下拉列表的最简单方法

使用C#在ASP.NET MVC 3中创建级联下拉列表的最简单方法

我想DropDownList在(使用)优选地在级联中创建两个。MVC3RazorC#

我想有一个下拉列表,您可以选择年份,另一个下拉列表,您可以根据所选年份选择特定的月份。

我们说得很简单。当我在下拉列表“年”中选择当前年份(即2011年)时,下拉列表“月”将填充当月(即3月)的月份。对于其他情况(其他年份),没有给出限制。此外,在选择下拉列表“年”中的任何元素之前,“阻止”下拉列表“月”将是很好的。

我已经在互联网上查找了一些解决方案,使用jQuery甚至是自制方法,但它们都引用了过去版本的MVC,并且一些命令已被弃用MVC3


婷婷同学_
浏览 431回答 1
1回答

精慕HU

一如既往,您从一个模型开始:public&nbsp;class&nbsp;MyViewModel{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int?&nbsp;Year&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int?&nbsp;Month&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IEnumerable<SelectListItem>&nbsp;Years &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Enumerable.Range(2000,&nbsp;12).Select(x&nbsp;=>&nbsp;new&nbsp;SelectListItem &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Value&nbsp;=&nbsp;x.ToString(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text&nbsp;=&nbsp;x.ToString() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}然后一个控制器:public&nbsp;class&nbsp;HomeController&nbsp;:&nbsp;Controller{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Index() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;model&nbsp;=&nbsp;new&nbsp;MyViewModel(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(model); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ActionResult&nbsp;Months(int&nbsp;year) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(year&nbsp;==&nbsp;2011) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Json( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumerable.Range(1,&nbsp;3).Select(x&nbsp;=>&nbsp;new&nbsp;{&nbsp;value&nbsp;=&nbsp;x,&nbsp;text&nbsp;=&nbsp;x&nbsp;}),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonRequestBehavior.AllowGet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Json( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumerable.Range(1,&nbsp;12).Select(x&nbsp;=>&nbsp;new&nbsp;{&nbsp;value&nbsp;=&nbsp;x,&nbsp;text&nbsp;=&nbsp;x&nbsp;}), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonRequestBehavior.AllowGet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;}}最后一个观点:@model&nbsp;AppName.Models.MyViewModel@Html.DropDownListFor( &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=>&nbsp;x.Year,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;SelectList(Model.Years,&nbsp;"Value",&nbsp;"Text"), &nbsp;&nbsp;&nbsp;&nbsp;"--&nbsp;select&nbsp;year&nbsp;--")@Html.DropDownListFor( &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=>&nbsp;x.Month,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Enumerable.Empty<SelectListItem>(), &nbsp;&nbsp;&nbsp;&nbsp;"--&nbsp;select&nbsp;month&nbsp;--")<script&nbsp;type="text/javascript"> &nbsp;&nbsp;&nbsp;&nbsp;$('#Year').change(function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;selectedYear&nbsp;=&nbsp;$(this).val(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(selectedYear&nbsp;!=&nbsp;null&nbsp;&&&nbsp;selectedYear&nbsp;!=&nbsp;'')&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.getJSON('@Url.Action("Months")',&nbsp;{&nbsp;year:&nbsp;selectedYear&nbsp;},&nbsp;function&nbsp;(months)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;monthsSelect&nbsp;=&nbsp;$('#Month'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monthsSelect.empty(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.each(months,&nbsp;function&nbsp;(index,&nbsp;month)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monthsSelect.append($('<option/>',&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;month.value, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text:&nbsp;month.text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;});</script>显然你会注意到在我的例子中我已经硬编码了所有的值。您应该通过使用当前年份,当前月份等概念来改进此逻辑,甚至可能从存储库中获取这些值等等......但出于演示的目的,这应该足以让您走上正确的轨道。
随时随地看视频慕课网APP
我要回答