Если кто-нибудь может помочь мне, я буду очень признателен.
Я заполняю выпадающий список, выбирая имена из таблицы компании. В чем мне нужна помощь, так это в том, что я могу передавать несколько выбранных элементов в мое действие и возвращать результаты. Я уже могу сделать это с помощью выпадающего списка, но не знаю, как это сделать с помощью мультиселекта.
Вот так я заполняю свой мультиселект
@{
UserContext userContext = new UserContext();
UserModel user = new UserModel();
user.CompanyList = userContext.GetCompanyList();
@Html.ListBoxFor(model => user.SelectedArray, new MultiSelectList(user.CompanyList, "cmpName", "cmpName"), new { @class = " form-control chosen-select ", @id = "company", multiple = "multiple" })
}
JSON для отправки выборов в действие и заполнения dataTable.
$(document).ready(function () {
var yesnoTable = $('#datatableCmp').DataTable({
"ajax": {
"url": "/Users/GetList",
"type": "POST",
"datatype": "json"
},
"columns": [
{ "data": "ID", "name": "ID" },
{ "data": "FriendlyName", "name": "FriendlyName" },
{ "data": "ContactNumber", "name": "ContactNumber" },
{ "data": "EmailAddress", "name": "EmailAddress" },
{ "data": "DateOfBirth", "name": "DateOfBirth" },
{ "data": "Company", "name": "Company" },
{ "data": "LoginAccepted", "name": "LoginAccepted" },
{ "data": "Action", "name": "Action" }
],
"serverSide": "true",
"processing": "true",
"orderMulti": "false"
});
oTable = $('#datatableCmp').DataTable();
$('#UsersearchButton').click(function () {
oTable.columns(1).search($('#filter_Name').val().trim());
oTable.columns(6).search($('#yesNo option:selected').text());
oTable.columns(5).search($('#company option:selected').text());
});
});
Результат действия
public ActionResult GetList()
{
List<UserModel> usrModel = new List<UserModel>();
usrModel = userViewModel.Index();
var draw = Request.Form.GetValues("draw").FirstOrDefault();
var start = Request.Form.GetValues("start").FirstOrDefault();
var length = Request.Form.GetValues("length").FirstOrDefault();
var sortCulmn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();
int pageSize = length != null ? Convert.ToInt32(length) : 0;
int skip = start != null ? Convert.ToInt32(start) : 0;
int totalRecords = 0;
var userName = Request.Form.GetValues("columns[1][search][value]").FirstOrDefault();
var userCompany = Request.Form.GetValues("columns[5][search][value]").FirstOrDefault();
var userActive = Request.Form.GetValues("columns[6][search][value]").FirstOrDefault();
if (!string.IsNullOrEmpty(userName))
{
usrModel = usrModel.Where(a => a.FriendlyName.ToLower().Contains(userName.ToLower())).ToList();
}
if (!string.IsNullOrEmpty(userActive))
{
usrModel = usrModel.Where(a => a.LoginAccepted == userActive).ToList();
}
if (!string.IsNullOrEmpty(userCompany))
{
usrModel = usrModel.Where(a => a.Company.Contains(userCompany)). ToList();
}
if (!(string.IsNullOrEmpty(sortCulmn + "" + sortColumnDir)))
{
usrModel = usrModel.OrderBy(sortCulmn + " " + sortColumnDir).ToList();
}
totalRecords = usrModel.Count();
var data = usrModel.Skip(skip).Take(pageSize).ToList();
return Json(new { draw = draw, recordsFiltered = totalRecords, recordsTotal = totalRecords, data = data }, JsonRequestBehavior.AllowGet);
}
Когда я запускаю отладчик, я вижу результат с именем без пробела (BobBuilderTch), имена сохраняются в БД в виде следующего, например ... Tch, Bobbuilder, Makro. Я собираюсь начать сохранять их как целые числа, но пока они сохраняются как строковые значения.
Я попробовал
oTable.columns(5).search($('#company option:selected').append('<option value="' + "," + '">' + "," + '</option>').text());
Но это ничего не вернуло.
Заранее спасибо.