#javascript #asp.net-core
#javascript #asp.net-core
Вопрос:
Как передать значение из столбца множественного выбора из представления в метод get контроллера. Я пытаюсь передать значение из dropdownDepot в отдел списка аргументов контроллера. Пожалуйста, помогите
public class ReportViewModel
{
public int DepotNo { get; set; }
public List<int> Department { get; set; }
}
[HttpGet]
public IActionResult EmployeeView(ReportViewModel report, List<int> Department,int DepotNo = 0)
{
List<EmployeeWorkTimeSettingsModel> log = new List<EmployeeWorkTimeSettingsModel>();
log = ReportService.GetDepotEmployeeWorkHrsReport(connectionSettings, (HttpContext.Session.GetInt32("UserID") ?? 0).ToString(),
String.Join(",", report.DepotNo), String.Join(",", report.Department));
ViewBag.EmpviewReport = log;
}
<div class="controls col-sm-9">
<select asp-for="DepotNo" class="form-control" id="dropdownDepot" asp-items="@ViewBag.UserDepots" onchange="FillEmployee()" data-role="select"></select>
<span asp-validation-for="DepotNo" class="text-danger"></span>
</div>
<div class="controls col-sm-9">
<select id="dropdownDepartment" class="form-control" asp-for="Department" asp-items="@ViewBag.UserDepartments" onchange="FillEmployee()"
data-role="select"></select>
</div>
$('#dropdownDepartment').multiselect({
columns: 1,
placeholder: 'Select Department',
includeSelectAllOption: true,
maxHeight: 300
});
function FillEmployee() {
var href = '/Report/EmployeeView?depot=' $("#dropdownDepot option:selected").val() 'amp;department=' Get the Value from multiselect departments;
$("#lnkFilter").attr('href', href);
$("#lnkFilter").click();
}
Ответ №1:
Вы могли бы использовать ajax для передачи всех ваших данных контроллеру при выборе
function FillEmployee() {
$.ajax({
type: 'GET',
url: '/Report/EmployeeView?DepotNo=' $('#dropdownDepot').val() 'amp;department=' $('#dropdownDepartment').val().join('amp;department='),
success: function (result) {
console.log('Data received: ');
console.log(result);
}
});
}
Экшен:
[HttpGet]
public IActionResult EmployeeView([FromQuery]List<int> Department, [FromQuery]int DepotNo)
Ответ №2:
Вы можете использовать val()
непосредственно в элементе select, не прибегая сначала к фильтрации по выбранным параметрам. Когда вы делаете это для выбранного множества, вы получаете обратно массив выбранных значений:
$('#dropdownDepot').val() // single selected value
И
$('dropdownDepartment').val() // array of selected values
Для правильной привязки массива вам нужно фактически повторить department
параметр для каждого выбранного значения:
amp;department=value1amp;department=value2amp;department=value3
Для этого должно сработать что-то вроде следующего:
'amp;department=' $('#dropdownDepartment').val().join('amp;department=')
Комментарии:
1. Еще одна проблема, с которой я сталкиваюсь, после каждого выбора предыдущее выбранное значение исчезает из множественного выбора после перехода в функцию. Когда я комментирую функцию FillEmployee(), значение выбранного отдела останется, в противном случае обратите внимание. Как я могу решить эту проблему. Причиной отмены выбора выбранного отдела является код $(«#lnkFilter»).click(); Как я могу передать аргумент без вызова $(«#lnkFilter»).click(); Пожалуйста, вы можете помочь?