#c# #asp.net-core
#c# #asp.net-core
Вопрос:
У меня есть таблица флагов, которую я получаю просто так.
public void GetFlags()
{
var flags = _context.Flags.ToList();
ViewBag.CountryFlags = flags;
}
Я хочу поместить его в пакет просмотра, но мне это нужно в этом формате
var isoCountries = [
{ id: 1, flag: 'af', country : 'Afghanistan' },
{ id: 2, flag: 'ax', country : 'Aland Islands' },
{ id: 3, flag: 'al', country : 'Albania' },
{ id: 4, flag: 'dz', country : 'Algeria' },
{ id: 5, flag: 'as', country : 'American Samoa' },
{ id: 6, flag: 'ad', country : 'Andorra' },
{ id: 7, flag: 'ao', country : 'Angola' },
{ id: 8, flag: 'ai', country : 'Anguilla' }
]
Как я могу убедиться, что мой класс закодирован правильно, я знаю, что у меня должны быть те же элементы, которые требуются в странах iso, но как мне сериализовать, правильно.
Класс флагов
public class Flags {
public int id { get; set; }
public string flag { get; set; }
public string country { get; set; }
}
Вот как я создаю флаг в выпадающем списке.
<Script>
$(function () {
//Initialize Select2 Elements
//$('.select2').select2()
var isoCountries = @ViewBag.CountryFlags;
function formatCountry(country) {
if (!country.id) { return country.text; }
var $country = $(
'<span class="flag-icon flag-icon-' country.Flag ' flag-icon-squared"></span>'
'<span class="flag-text">' country.Country "</span>"
);
return $country;
};
//Assuming you have a select element with name country
// e.g. <select name="name"></select>
$("[id='CountryOfBirth']").select2({
placeholder: "Please Select a country",
templateResult: formatCountry,
data: isoCountries
});
$('#CountryOfBirth').trigger('change');
});
</script>
Что я пробовал
public void GetFlags() {
var flags = _context.Flags.ToList();
var isoCountires = JsonConvert.SerializeObject(flags);
ViewBag.CountryFlags = isoCountires;
}
Я также пытался использовать это, поскольку, как я заметил, в json на нем была HTML-кодировка
var isoCountries = { json : "@Html.Raw(JsonConvert.SerializeObject(@ViewBag.CountryFlags))" };
Но он все еще не в том формате, который необходим для получения результатов, описанных выше.
Комментарии:
1. Нам нужно знать тип флагов внутри _context. Пожалуйста, включите это объявление в свой вопрос. Вероятно, это начинается с
class Flag
. Вероятно, вы сможете решить свою проблему довольно просто, используя метод LinqSelect
.2. Это требует более подробной информации. Помогите мне воспроизвести ваши результаты.
3. @Wyck пожалуйста, смотрите выше
4. @JoelFan добавил больше деталей, извините за это
5. Я думаю, вы имеете в виду сериализацию , а не стерилизацию , но я не уверен.
Ответ №1:
Просто измените его следующим образом:
var isoCountries = JSON.parse('@Html.Raw(ViewBag.CountryFlags)');
С помощью метода GetFlags:
public void GetFlags() {
var flags = _context.Flags.ToList();
var isoCountires = JsonConvert.SerializeObject(flags);
ViewBag.CountryFlags = isoCountires;
}