C# Net Mvc选择器选择器
我正在尝试在我的应用程序中使用Bootstrap Selectpicker实现DropDownList Multi-Select来选择学校 我不太熟悉MVC和JQuery,因为我已经使用webforms很长一段时间了,所以我正在从internet学习来完成 以下是场景: 在我的布局中,有一个下拉列表:C# Net Mvc选择器选择器,c#,jquery,asp.net-mvc,twitter-bootstrap,bootstrap-selectpicker,C#,Jquery,Asp.net Mvc,Twitter Bootstrap,Bootstrap Selectpicker,我正在尝试在我的应用程序中使用Bootstrap Selectpicker实现DropDownList Multi-Select来选择学校 我不太熟悉MVC和JQuery,因为我已经使用webforms很长一段时间了,所以我正在从internet学习来完成 以下是场景: 在我的布局中,有一个下拉列表: @*DropDownList Select School*@ @Html.DropDownList("Sch
@*DropDownList Select School*@
@Html.DropDownList("Schools", null, null, new { id = "MultiSelect", @class = "selectpicker form-control", multiple = "", title = "School" })
public ActionResult Class()
{
IEnumerable<SelectListItem> ListClasses = db.scasy_class
.OrderBy(a => a.class_name)
.Select(c => new SelectListItem
{
Value = c.id.ToString(),
Text = c.class_name,
Selected = false
});
ViewBag.Class = ListClasses.ToList();
ClassViewModel classViewModel = new ClassViewModel()
{
SelectOptions = ListClasses
};
return View(classViewModel);
}
填写下拉列表的代码:
@*DropDownList Select School*@
@Html.DropDownList("Schools", null, null, new { id = "MultiSelect", @class = "selectpicker form-control", multiple = "", title = "School" })
public ActionResult Class()
{
IEnumerable<SelectListItem> ListClasses = db.scasy_class
.OrderBy(a => a.class_name)
.Select(c => new SelectListItem
{
Value = c.id.ToString(),
Text = c.class_name,
Selected = false
});
ViewBag.Class = ListClasses.ToList();
ClassViewModel classViewModel = new ClassViewModel()
{
SelectOptions = ListClasses
};
return View(classViewModel);
}
以及控制器
public ActionResult SetSchool(int school, bool selected)
{
ArrayList school_nos = Session["Schools"] as ArrayList;
if (selected)
{
if (!school_nos.Contains(school))
{
school_nos.Add(school);
}
}
else
{
if (school_nos.Contains(school))
{
school_nos.Remove(school);
}
}
Session["Schools"] = school_nos;
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
public JsonResult GetSchool()
{
IEnumerable<SelectListItem> ListSchools = db.scasy_school
.OrderBy(a => a.name)
.Select(a => new SelectListItem { Value = a.id.ToString(), Text = a.name});
ArrayList school_nos = Session["Schools"] as ArrayList;
List<SelectListItem> ListSchoolsUpdated = new List<SelectListItem>();
foreach (var item in ListSchools)
{
SelectListItem selListItem;
if (school_nos.Contains(item.Value.ToString()))
{
selListItem = new SelectListItem() { Value = item.Value.ToString(), Text = item.Text, Selected = true };
}
else
{
selListItem = new SelectListItem() { Value = item.Value.ToString(), Text = item.Text, Selected = false };
}
ListSchoolsUpdated.Add(selListItem);
}
return Json(ListSchoolsUpdated, JsonRequestBehavior.AllowGet);
}
在这里之前,它一直在按预期工作。
对于下一次重新加载,我尝试用相同的数据填充dropdownlist,但使用会话值用勾号显示以前选择的学校,因为我需要在许多其他页面上显示这些信息
$(document).ready(function () {
$.getJSON("/Setup/Student/GetSchool/",
function (data) {
var myData = [];
$.each(data, function (index, item) {
if (item.Selected == true) {
myData.push(item.Value);
}
});
//alert(myData);
$('#MultiSelect').selectpicker('val', myData);
});
});
以及控制器
public ActionResult SetSchool(int school, bool selected)
{
ArrayList school_nos = Session["Schools"] as ArrayList;
if (selected)
{
if (!school_nos.Contains(school))
{
school_nos.Add(school);
}
}
else
{
if (school_nos.Contains(school))
{
school_nos.Remove(school);
}
}
Session["Schools"] = school_nos;
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
public JsonResult GetSchool()
{
IEnumerable<SelectListItem> ListSchools = db.scasy_school
.OrderBy(a => a.name)
.Select(a => new SelectListItem { Value = a.id.ToString(), Text = a.name});
ArrayList school_nos = Session["Schools"] as ArrayList;
List<SelectListItem> ListSchoolsUpdated = new List<SelectListItem>();
foreach (var item in ListSchools)
{
SelectListItem selListItem;
if (school_nos.Contains(item.Value.ToString()))
{
selListItem = new SelectListItem() { Value = item.Value.ToString(), Text = item.Text, Selected = true };
}
else
{
selListItem = new SelectListItem() { Value = item.Value.ToString(), Text = item.Text, Selected = false };
}
ListSchoolsUpdated.Add(selListItem);
}
return Json(ListSchoolsUpdated, JsonRequestBehavior.AllowGet);
}
public JsonResult GetSchool()
{
IEnumerable ListSchools=db.scasy_学校
.OrderBy(a=>a.name)
.Select(a=>newselectListItem{Value=a.id.ToString(),Text=a.name});
ArrayList school_nos=作为ArrayList的会话[“学校”];
List ListSchoolsUpdated=新列表();
foreach(列表学校中的var项目)
{
选择ListItem selListItem;
if(学校编号包含(item.Value.ToString())
{
selListItem=new SelectListItem(){Value=item.Value.ToString(),Text=item.Text,Selected=true};
}
其他的
{
selListItem=new SelectListItem(){Value=item.Value.ToString(),Text=item.Text,Selected=false};
}
ListSchoolsUpdated.Add(selListItem);
}
返回Json(ListSchoolsUpdated,JsonRequestBehavior.AllowGet);
}
代码不会抛出错误,但我无法显示包含所选项目的dropdownlist
为页面声明一个模型类
public class ClassViewModel {
public List<int> SelectedSchools {get; set;}
public List<SelectListItem> Schools {get; set;}
}
然后在您的视图中,使用此代码显示dropdownlist
@Html.ListBoxFor(m=> m.SelectedSchools , Model.Schools, new {id = "MultiSelect", @class = "selectpicker form-control", title = "School" })
感谢您的评论,DropDownList位于_Layout.cshtml上。