Как я могу получить список строк из формы и вернуть результаты некоторых опций в выпадающий список, используя AJAX? - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно получить коды муниципалитетов из скрытых входов, которые связаны с выбранным флажком. Как я могу получить значение из этих скрытых входных данных и создать массив строк и отправить эти значения в метод контроллера TAGetDistrictsByMunicipality? Метод TAGetDistrictsByMunicipality возвращает массив строк, который необходимо добавить в список выбора SelectedDistricts после того, как муниципалитет выбран или не выбран.

Я пробовал $(this).parent().text().trim(), но он получает текст метки, не значение кода ввода. Есть ли способ использовать JQuery, чтобы получить значение кода для каждого выбранного муниципалитета в округе, вместо того, чтобы пытаться добавлять каждый элемент по отдельности, когда они выбраны? Мне нужно добавить или удалить значения из массива в зависимости от того, установлен флажок или нет.

Просмотр - HTML

<div class="form-table form-table-inner" id="muniTable">
<div>
    <label for="Municipalities_0__Selected">
        <input type="checkbox" data-val="true" data-val-required="The Selected field is required." id="Municipalities_0__Selected" name="Municipalities[0].Selected" value="true">002 - TOWN OF TEST
    </label>
    <input type="hidden" data-val="true" data-val-required="The Text field is required." id="Municipalities_0__Text" name="Municipalities[0].Text" value="002 - TOWN OF TEST">
    <input type="hidden" data-val="true" data-val-required="The Code field is required." id="Municipalities_0__Code" name="Municipalities[0].Code" value="002">
    <input type="hidden" data-val="true" data-val-required="The ID field is required." id="Municipalities_0__ID" name="Municipalities[0].ID" value="1">
</div>
<div class="row">
    <span class="col-2" style="padding-top: 6px;">
        <input type="checkbox" data-val="true" data-val-required="The LimitToDistrict field is required." id="LimitToDistrict" name="LimitToDistrict" value="true">
        <label><b>Limit to district</b></label>
    </span>
    <select disabled="" class="form-control col-3 d-inline-block input-validation-error" data-val="true" data-val-required="The SelectedDistrict field is required." id="SelectedDistrict" name="SelectedDistrict">
    </select>
</div>
</div>

Просмотр - Javascript

var munis = new Array();
$("#muniTable :checkbox").change(function (e) {
    if ($(this).is(":checked")) {
        $.ajax({
        type: 'POST',
        data: { muniSelections: munis },
        url: '@Url.Action("TAGetDistrictsByMunicipality", ViewContext.RouteData.Values["Controller"].ToString())',
        success: function (data) {
            //Display districts to dropdown list
            for (var x; x < data.length(); x++) {
                var item = $('<option></option>').attr({ value: data[x].text(), text = data[x].text() }).text();
                $('#SelectedDistrict').append( item ); //Add option to select list
            }

        }
    });
    }
    else { 
        $.ajax({
        type: 'POST',
        data: { muniSelections: munis },
        url: '@Url.Action("TAGetDistrictsByMunicipality", ViewContext.RouteData.Values["Controller"].ToString())',
        success: function (data) {
            //Display districts to dropdown list, add options to the select list
            for (var x = 0; x < data.length(); x++) {
                var item = $('<option></option>').attr({ value: data[x].text(), text = data[x].text() }).text();
                $('#SelectedDistrict').append( item ); //Add option to select list
            }
        }
    });
    }
});

Контроллер - Возвращает список строк

public JsonResult TAGetDistrictsByMunicipality(List<string> muniSelections)
{
    SortingSpecification sortingSpec = new SortingSpecification();
    ReportDataSortHelper.AddSortByDistrictStateCode(ref sortingSpec);
    MunicipalityDistrictMapManager.GetMunicipalityDistrictMapsWithMatchingFields(
        null,
        out EntityCollection<MunicipalityDistrictMapEntity> districtEntities,
        sortingSpec,
        fillDistrictEntities : true
    );

    EntityCollection<DistrictEntity> districts = new EntityCollection<DistrictEntity>();
    var MunicipalityEntities = new List<MunicipalityEntity>();

    foreach (var muniCode in muniSelections) {
        MunicipalityManager.GetMunicipalityByMunicipalityCode(muniCode, out MunicipalityEntity muni);
        MunicipalityEntities.Add(muni);
    }

    foreach (MunicipalityEntity municipality in MunicipalityEntities) {
        MunicipalityEntity mun = (MunicipalityEntity)municipality;
        List<int> matches = districtEntities.FindMatches(MunicipalityDistrictMapFields.MunicipalityId == municipality.MunicipalityId);
        foreach (int m in matches) {
            if (municipality.MunicipalityDistrictMap[m].District.Type == DistrictEntity.Type_School 
                || municipality.MunicipalityDistrictMap[m].District.Type == DistrictEntity.Type_Special){
                List<int> dmatch = districts.FindMatches(DistrictFields.DistrictId == municipality.MunicipalityDistrictMap[m].DistrictId);
                if (dmatch.Count == 0) {
                    districts.Add(districtEntities[m].District);
                }
            }
        }
    }

    IOrderedEnumerable<DistrictEntity> sorted = districts.OrderBy(d => d.DistrictStateCodeString);
    EntityCollection<DistrictEntity> sortedDistricts = new EntityCollection<DistrictEntity>();
    sortedDistricts.AddRange(sorted);

    List<string> districtCodeStrings = new List<string>();
    foreach (var sortedDistrict in sortedDistricts) {
        districtCodeStrings.Add(sortedDistrict.DistrictStateCodeDescriptionString);
    }

    return Json(new
    {
        districts = districtCodeStrings
    });
}
...