ASP.NET MVC 5查询数据库与3下拉列表

本文关键字:下拉列表 数据库 查询 NET MVC ASP | 更新日期: 2023-09-27 18:04:01

大家好,这是我在这里的第一个帖子,所以如果我说了什么或做了什么愚蠢的事情,请温和:p这也是我第一个真正的ASP项目。. NET和我确信我在我的代码中犯了一些错误。

我正在做一个ASP。NET MVC 5 web应用程序,有3个下拉列表,由数据库中的字符串填充。这三个列表是学期,课程和顾问的名字。我希望能够根据所做的选择动态地更改下拉列表。

我目前所做的假设是首先选择学期,然后是课程,然后是顾问的名字。在选择学期之后,代码不会填充顾问的名称。

在我理解了我的错误之后,我还想让它可以以任何顺序选择3个选项中的任何一个。

这是我的控制器

 public ActionResult Index(string Semester1, string Course1, string Consultant1)
    {

        ViewBag.semester = new SelectList(db.StudentInfos.Select(x => x.semester).Distinct().OrderBy(x => x));
        ViewBag.course = new SelectList(db.StudentInfos.Select(x => x.WCOnlineCourse) .Distinct().OrderBy(x => x));
        ViewBag.consultant = new SelectList(db.StudentInfos.Select(x => x.consultant).Distinct().OrderBy(x => x));
        if (Semester1 != null)
        {
            ViewBag.course = new SelectList(db.StudentInfos.Where(x => x.semester == Semester1).Select(x => x.WCOnlineCourse).Distinct().OrderBy(x => x));
            ViewBag.consultant = new SelectList(db.StudentInfos.Where(x => x.semester == Semester1).Select(x => x.consultant).Distinct().OrderBy(x => x));

            if (Course1 != null)
            {
                ViewBag.consultant = new SelectList(db.StudentInfos.Where(x => x.semester == Semester1).Where(x => x.WCOnlineCourse == Course1).Select(x => x.consultant).Distinct().OrderBy(x => x));
            }
        }

        return View();
    }

this is my view

@model IEnumerable<StudentSurvey.Models.StudentInfo>
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>

<table class="table">
    <tr>
        <th>
            Semester
        </th>
        <th>
            Course
        </th>
        <th>
            Consultant
        </th>
    </tr>
    <tr>
        @using (Html.BeginForm("Index", "StudentInfos", FormMethod.Post))
        {
            <td>
                @Html.DropDownList("Semester1", (SelectList)ViewBag.semester, "Select Semester", new { onchange = "this.form.submit();" })
            </td>
            <td>
                @Html.DropDownList("Course1", (SelectList)ViewBag.course, "Select Course", new { onchange = "this.form.submit();" })
            </td>
            <td>
                @Html.DropDownList("Consultant1", (SelectList)ViewBag.consultant, "Select Consultant", new { onchange = "this.form.submit();" })
            </td>
        }

    </tr>
</table>

ASP.NET MVC 5查询数据库与3下拉列表

您可以使用jQuery,例如,对于2选项,我们可以使用以下代码:

$('#Cities').change(function () {                
               jQuery.getJSON('@Url.Action("SelectTown")', { id: $(this).val() }, function (data) {
                   $('#Towns').empty();
                   jQuery.each(data, function (i) {
                       var option = $('<option></option>').val(data[i].ID).text(data[i].Name);
                       $("#Towns").append(option);
                   });
               });
           });

对于3个选项,比如你的例子,我们可以这样写:

$(function (){
  $('#semester').change(function () {
    jQuery.getJSON('/Semester/GetCourse/', { id: $(this).attr('value') }, function (data) {
        jQuery.each(data, function (i) {
            var option = $('<option></option>').attr("value", data[i].Id).text(data[i].Title);
            $("#course").append(option);
        });
    });
    jQuery.getJSON('/Consultant/GetConsultant/', { id: $("#course").attr('value') }, function (man) {
        jQuery.each(man, function (i) {
            var option = $('<option></option>').attr("value", man[i].Id).text(man[i].Title);
            $("#mantaqeh").append(option);
        });
    });
  });
});

您正在寻找的是建立一个级联下拉列表。当选择下拉菜单时,您需要实现一些东西来通过ajax加载数据,或者您需要执行回发(不推荐)。

查看这个答案,或者查看codeproject上的这篇文章的教程