jquery 如何通过javascript AJAX 调用为SelectList设置ASP-Items值

gfttwv5a  于 2022-11-03  发布在  jQuery
关注(0)|答案(1)|浏览(104)

我在一个表单上有一个州下拉列表,当用户选择一个州时,我希望城市下拉列表只填充与该州相关的城市。
我的表单检视中有2个选取方块:

<div class="col-md-3 py-2">
            <label asp-for="@Model.Quote.CompanyState" class="form-label"></label>
            <select asp-for="@Model.Quote.CompanyState" asp-items="@Model.States" class="form-select">
                <option selected>Choose...</option>
            </select>
            <span asp-validation-for="@Model.Quote.CompanyState" class="text-danger"></span>
        </div>
        <div id="cityDDL" class="col-md-3 py-2" style="display:none;">
            <label asp-for="@Model.Quote.CompanyCity" class="form-label"></label>
            <select asp-for="@Model.Quote.CompanyCity" asp-items="@Model.Cities" class="form-select">
                <option selected>Choose...</option>
            </select>
            <span asp-validation-for="@Model.Quote.CompanyCity" class="text-danger"></span>
        </div>

然后我有一个Javascript,当选择州时,它通过 AJAX 获取城市:

$('#Quote_CompanyState').on('change', function () {
        var state = $('#Quote_CompanyState Option:Selected').val();
        Quote.GetCitiesDropDown(state);
    })

我对控制器的 AJAX 调用:

Quote.GetCitiesDropDown = function (state) {

    $.ajax({
        url: Global.basePath + 'Quote/GetCitiesDropDown',
        type: "POST",
        dataType: 'json',//if returning view, must be html, else use json
        data: {state: state},
        cache: false,
        success: function (data) {
            console.log(data);
            $('#cityDDL').show();
        },
        error: function (xhr, status, error) {
            var err = JSON.parse(xhr.responseText);
            alert('Error: ' + err.quote_error[0]);
        },
        complete: function (data) {
        }
    });
}

我的控制器,它获取与所选州有关的城市的SelectListItems:

[HttpPost]
public IActionResult GetCitiesDropDown(string state)
{
    //var statesJSON = _config.GetSection("UnitedStatesList").Get<Dictionary<string,string>>();
    var cities = _config.GetSection("CitiesByState").GetSection(state).Get<Dictionary<string, string>>();
    var citiesDDIs = cities.Select(city => new SelectListItem
    {
        Value = city.ToString(),
        Text = city.ToString()
    }).ToList();
    return Json(citiesDDIs);
}

现在,它将对象返回到 AJAX 调用的成功部分,但是我如何设置下拉视图javascript的选项项呢?这是我通过javascript获得的数据......我希望设置asp-items值......但我不确定如何使用Javascript来完成这一操作。下面是它返回的亚拉巴马州的城市,例如:

pdkcd3nj

pdkcd3nj1#

所以从控制器返回一个字典会向 AJAX 调用发送一个对象。我必须弄清楚如何在JS中循环通过该对象:

success: function (data) {
    console.log(data);
    $('#cityDDL').show();
    var citiesSelect = $('#Quote_CompanyCity');
    $(citiesSelect).empty();
    $(citiesSelect).append($(`<option selected>Choose ${state} city</option>`));
    for (var key in data) {
        if (data.hasOwnProperty(key)) {
            $(citiesSelect).append($(`<option value="${data[key]}">${data[key]}</option>`));
        }
    }

},

相关问题