У меня есть два dropdownlists для языков и стран
При выборе языка в раскрывающемся списке следует заполнить соответствующие страны в выпадающем списке страны
@Html.DropDownList("LanguageSelectList", null, null, new { @class = "hyper-select fixedwidth300"})
@Html.DropDownList("CountrySelectList", null, null, new { @class = "hyper-select fixedwidth300" })
Вот мой сценарий jquery
$("#LanguageSelectList").change(function (event) {
$("#languageValidator").hide();
var selectedLanguage = $("#LanguageSelectList").val();
debugger;
//--------
if (selectedLanguage!='') {
var url = '@Url.Action("GetCountryListByLanguage", "Options")';
$.ajax({
type: "POST",
url: url,
data: { selectedLanguage: selectedLanguage },
dataType: "json",
contentType: "application/json; charset=utf-8",
global: false,
async: false,
success: function (data) {
var ddlCountrylist = $("#CountrySelectList");
debugger;
var jsonString =JSON.stringify(data);
//here how to take data from jsonstring to countries dropdownlist
}
});
} else {
alert('no country returnned');
}
//--------------
});
Я могу получить ожидаемый список стран в данных json, как указано ниже. Теперь как я могу заполнить раскрывающийся список моей страны.
jsonString="[{\"Selected\":false,\"Text\":\"n/a\",\"Value\":\"\"},{\"Selected\":false,\"Text\":\"China\",\"Value\":\"CN\"},{\"Selected\":false,\"Text\":\"Hong Kong\",\"Value\":\"HK\"},{\"Selected\":false,\"Text\":\"Singapore\",\"Value\":\"SG\"},{\"Selected\":false,\"Text\":\"Taiwan\",\"Value\":\"TW\"}]"
внутри вашего обработчика успеха просто перебирайте возвращаемый массив и добавляйте параметр для выпадающего списка для каждого элемента массива.
ddlCountrylist.find('option').remove();
$(data).each(function(i,v){
$('<option value='+v.Value+'>'+v.Text+'</option>').appendTo(ddlCountrylist);
});
В разделе успеха вашего вызова ajax для метода контроллера вы можете написать приведенный ниже код:
success: function (data) {
$('#CountrySelectList').empty();
$.each(data.agent, function() {
$('#CountrySelectList').append(
$('<option/>', {
value: this.Value,
html: this.Text
})
);
});
}
Я не тестировал вышеуказанный код, но я надеюсь, что это определенно сработает