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>
您可以使用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上的这篇文章的教程