我有一个基于ASP.NET MVC4,SQL Server 2012,EF的项目。
在我的编辑表单中,我需要将下拉列表显示在页面上显示的复选框中。当选中下拉列表中的一个或多个复选框时,需要根据表中的特殊行从数据库加载值。这是我的代码,用于展示我现在拥有的东西:
控制器
public ActionResult StudentEdit(int id)
{
Student student = repo.GetStudentById(id);
ViewBag.EducationProgramBachelorId = new SelectList(
context.EducationProgramBachelors, "EducationProgramBachelorId", "ProgramName",
student.EducationProgramBachelorId);
return View(student);
}
public JsonResult ProgramList(int Id)
{
var model = context.EducationProgramBachelors;
var program = from s in model
where s.UniversityId == Id
select s;
return Json(new SelectList(program, "EducationProgramBachelorId", "ProgramName"), JsonRequestBehavior.AllowGet);
}
查看
@{
List<ViewModels.AssignedUniversities> universities = ViewBag.Universities;
foreach (var university in universities)
{
<div>
<input type="checkbox"
class="checkboxUniversities"
name="selectedLatUniversities"
value="@university.UniversityNameShort"
@(Html.Raw(university.IsSelected ? "checked=\"checked\"" : ""))/>
@university.UniversityNameShort
</div>
}
}
@Html.DropDownList("EducationProgramBachelorId", String.Empty)
JS功能
$(function () {
$(".checkboxUniversities").change(function () {
$.getJSON('/ControllerName/ProgramList/' + 1, function (data) {
var items = '<option>Select a Program</option>';
$.each(data, function (i, program) {
items += "<option value='" + program.Value + "'>" + program.Text + "</option>";
});
$('#EducationProgramBachelorId').html(items);
});
});
});
我在JS函数中停止了这一步:
$.getJSON('/ControllerName/ProgramList/' + 1, function (data)
因为我不知道如何获取并发送我的UniversityId的int []数组以及如何在我的Json视图中转换它。有人可以帮我解决这个问题吗?
在这行get('/ ControllerName / ProgramList /'+ 1,1 - 它是检查工作或不工作我的脚本的测试值。
学生与大学之间是多对多的关系。
P.S。:对不起我的英文
答案 0 :(得分:2)
如果我理解正确,只要点击一个复选框,你想要返回一个ID数组,然后使用与id对应的数据填充下拉列表,对吗?
我建议使用MVC框架的全部范围为您做繁重的工作,即:
<div>
看起来像下面这样。
<强>控制器强>
public ActionResult ProgramList(int id){
var model = context.EducationProgramBachelors;
var program = from s in model
where s.UniversityId == Id
select s;
return PartialView("studentProgram", program);
}
部分视图(名为“studentProgram”)
@model IEnumerable<Student>
@Html.DropDownFor("EducationProgramBachelorId", new SelectList(Model, "EducationProgramBachelorId", "ProgramName"))
主视图
@{
List<ViewModels.AssignedUniversities> universities = ViewBag.Universities;
foreach (var university in universities)
{
<div>
<input type="checkbox"
class="checkboxUniversities"
name="selectedLatUniversities"
value="@university.Id"
@(Html.Raw(university.IsSelected ? "checked=\"checked\"" : ""))/>
@university.UniversityNameShort
</div>
}
}
<div id="dropdown-placeholder"></div>
<强>的jQuery 强>
$(function () {
$(".checkboxUniversities").change(function (event) {
var id = $(event.target).val();
$.get('/ControllerName/ProgramList/' + id, function (data) {
$("#dropdown-placeholder").html(data);
});
});
});
这应该简化很多事情。大学的ID应作为其值添加到复选框中,稍后通过change
函数的target
属性获取。
我不知道你Student
课程的确切结构,所以如果我做了一些错误的假设,你可能需要调整一下。
我将此代码直接写入StackOverflow窗口并且未对其进行测试,因此可能存在拼写错误
希望这有帮助!