为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-07-26 11:21:39
使用C#在ASP.NET MVC 3中创建级联下拉列表的最简单方法我想DropDownList在(使用)优选地在级联中创建两个。MVC3RazorC#我想有一个下拉列表,您可以选择年份,另一个下拉列表,您可以根据所选年份选择特定的月份。我们说得很简单。当我在下拉列表“年”中选择当前年份(即2011年)时,下拉列表“月”将填充当月(即3月)的月份。对于其他情况(其他年份),没有给出限制。此外,在选择下拉列表“年”中的任何元素之前,“阻止”下拉列表“月”将是很好的。我已经在互联网上查找了一些解决方案,使用jQuery甚至是自制方法,但它们都引用了过去版本的MVC,并且一些命令已被弃用MVC3。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

一如既往,您从一个模型开始:

public class MyViewModel{
    public int? Year { get; set; }
    public int? Month { get; set; }

    public IEnumerable<SelectListItem> Years
    {
        get        {
            return Enumerable.Range(2000, 12).Select(x => new SelectListItem
            {
                Value = x.ToString(),
                Text = x.ToString()
            });
        }
    }}

然后一个控制器:

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
        );
    }}

最后一个观点:

@model AppName.Models.MyViewModel@Html.DropDownListFor(
    x => x.Year, 
    new SelectList(Model.Years, "Value", "Text"),
    "-- select year --")@Html.DropDownListFor(
    x => x.Month, 
    Enumerable.Empty<SelectListItem>(),
    "-- select month --")<script type="text/javascript">
    $('#Year').change(function () {
        var selectedYear = $(this).val();
        if (selectedYear != null && selectedYear != '') {
            $.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) {
                var monthsSelect = $('#Month');
                monthsSelect.empty();
                $.each(months, function (index, month) {
                    monthsSelect.append($('<option/>', {
                        value: month.value,
                        text: month.text                    }));
                });
            });
        }
    });</script>

显然你会注意到在我的例子中我已经硬编码了所有的值。您应该通过使用当前年份,当前月份等概念来改进此逻辑,甚至可能从存储库中获取这些值等等......但出于演示的目的,这应该足以让您走上正确的轨道。


查看完整回答
反对 回复 2019-07-26
  • 1 回答
  • 0 关注
  • 397 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信