выбрано несколько из столбца множественного выбора в файле представления после вызова функции

#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(); Пожалуйста, вы можете помочь?