Asp.net MVC4 下拉列表绑定到带有 JavaScript 的复选框
Asp.net mvc4 dropdown binding to checkboxes with javascript
我有一个基于 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 - 这是一个测试值,用于检查工作或不工作我的脚本。
学生和大学之间是多对多的关系。
PS:对不起我的英语
如果我
理解正确,您希望在单击复选框时返回一个 Ids 数组,然后用与 id 对应的数据填充下拉列表,对吗?
我建议使用MVC框架的全部范围来为您完成繁重的工作,即:
- 返回分部视图而不是 (json) int 数组
- 在部分视图中,只需使用 MVC:s 常规模型视图工具创建下拉菜单
- 将菜单插入主视图
<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);
}
部分视图(名为"学生程序")
@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窗口,还没有测试过,所以可能有错别字
希望这有帮助!
相关文章:
- Javascript复选框函数:;缺少:在属性id之后"
- 潜水没有在Bootstrap/Javascript复选框菜单中排队
- JavaScript 复选框全选、取消全选、反转选择
- 单击离开时选中的 JavaScript 复选框
- Javascript复选框验证:如果用户没有't选中特定复选框
- Javascript复选框逻辑错误
- Javascript复选框填充输入并将不同的值传递给表单
- 简单的 JavaScript 复选框验证
- JavaScript 复选框表 - 如何添加值并查找最高值
- Ajax JavaScript 复选框更改不起作用
- Javascript 复选框表单验证
- 使用 JavaScript 复选框事件切换 html 的可见性
- JavaScript - 复选框的作用类似于单选按钮
- jQuery / JavaScript 复选框显示多个和单个选择中选中的复选框的数量
- javascript 复选框 - 仅在引导模式确定时取消选中
- 设置 JQuery HTML javascript 复选框工作,但不显示为选中状态
- Javascript复选框已选中触发器问题
- Javascript复选框的问题
- Javascript复选框递增和递减
- Javascript-复选框onclick-+操作