2016-03-15 7 views
1

В мире насчитывается 196 стран.ASP.NET Не может получить ПОЛНЫЙ список ВСЕХ стран мира

Я пытаюсь показать выпадающий список, который отображает их все.

Я вижу, что многие разработчики предлагают использовать CultureInfo ASP.NET, но он отсутствует в некоторых странах, потому что культура & Страна - это разные вещи.

Итак, как я могу получить список всех стран для своей цели? Я действительно ценю твою помощь.

+0

Как вы говорите, Культура и страны не являются синонимами. По какой причине вы не можете использовать https://en.wikipedia.org/wiki/List_of_sovereign_states? –

+0

Итак, как я могу получить список всех стран, пожалуйста? – HungDQ

+3

https://restcountries.eu/ предоставляет API, которые вы можете использовать для получения списка стран. – Hakunamatata

ответ

2

В ASP.NET раскрывающийся

<asp:DropDownList ID="selCountries" runat="server"></asp:DropDownList> 

эквивалентно

<select id="selCountries"></select> 

В качестве альтернативы, вы можете использовать веб-службы, чтобы заполнить select тег со странами через JavaScript XMLHttpRequest объекта.

Пример: https://restcountries.eu/

Нечто подобное:

(function() { 
 
    var newXHR; 
 

 
    function sendXHR(options) { // Helper function. 
 
    newXHR = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP"); 
 
    if (options.sendJSON === true) { 
 
     options.contentType = "application/json; charset=utf-8"; 
 
     options.data = JSON.stringify(options.data); 
 
    } else { 
 
     options.contentType = "application/x-www-form-urlencoded"; 
 
    } 
 
    newXHR.open(options.type, options.url, options.async || true); 
 
    newXHR.setRequestHeader("Content-Type", options.contentType); 
 
    newXHR.send((options.type == "POST") ? options.data : null); 
 
    newXHR.onreadystatechange = options.callback; 
 
    return newXHR; 
 
    } 
 

 
    sendXHR({ 
 
    type: "GET", 
 
    url: "https://restcountries.eu/rest/v1/all", 
 
    callback: function() { 
 
     if (newXHR.readyState === 4 && newXHR.status === 200) { 
 
     var data = JSON.parse(newXHR.response); 
 

 
     var selCountries = document.getElementById("selCountries"); // Get the select tag. 
 

 
     // You can get the selected country. 
 
     selCountries.onchange = function() { 
 
      alert(this.value); 
 
     }; 
 

 

 
     var option; 
 

 
     for (var i = 0; i < data.length; i++) { // For every country make an option tag. 
 
      option = document.createElement("option"); 
 
      selCountries.options.add(option, 0); 
 
      selCountries.options[0].value = data[i].name; // Country name from the index «i» of the data array. 
 
      selCountries.options[0].innerText = data[i].name; 
 
      selCountries.appendChild(option); // Append the option tag to the select tag. 
 
     } 
 
     } 
 
    } 
 
    }); 
 
})();
<select id="selCountries"></select>

В ASP.NET MVC5 NET 4.5, можно привязать объект к @Html.DropDownList с помощью ViewBag.

Вам необходимо создать модель в соответствии с https://restcountries.eu/rest/v1/all Ответ от json.

Модель: CountryModel.cs

using System.Collections.Generic; 

namespace RestCountries.Models 
{ 
    public class Translations 
    { 
     public string de { get; set; } 
     public string es { get; set; } 
     public string fr { get; set; } 
     public string ja { get; set; } 
     public string it { get; set; } 
    } 

    public class CountryModel 
    { 
     public string name { get; set; } 
     public string capital { get; set; } 
     public List<string> altSpellings { get; set; } 
     public string relevance { get; set; } 
     public string region { get; set; } 
     public string subregion { get; set; } 
     public Translations translations { get; set; } 
     public int population { get; set; } 
     public List<object> latlng { get; set; } 
     public string demonym { get; set; } 
     public double? area { get; set; } 
     public double? gini { get; set; } 
     public List<string> timezones { get; set; } 
     public List<object> borders { get; set; } 
     public string nativeName { get; set; } 
     public List<string> callingCodes { get; set; } 
     public List<string> topLevelDomain { get; set; } 
     public string alpha2Code { get; set; } 
     public string alpha3Code { get; set; } 
     public List<string> currencies { get; set; } 
     public List<object> languages { get; set; } 
    } 
} 

Контроллер: DefaultController.cs

using RestCountries.Models; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Web.Mvc; 

namespace RestCountries.Controllers 
{ 
    public class DefaultController : Controller 
    { 
     // GET: Default 
     public ActionResult Index() 
     { 
      string url = "https://restcountries.eu/rest/v1/all"; 

      // Web Request with the given url. 
      WebRequest request = WebRequest.Create(url); 
      request.Credentials = CredentialCache.DefaultCredentials; 

      WebResponse response = request.GetResponse(); 

      Stream dataStream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(dataStream); 

      string jsonResponse = null; 

      // Store the json response into jsonResponse variable. 
      jsonResponse = reader.ReadLine(); 

      if (jsonResponse != null) 
      { 
       // Deserialize the jsonRespose object to the CountryModel. You're getting a JSON array []. 
       List<CountryModel> countryModel = Newtonsoft.Json.JsonConvert.DeserializeObject<List<CountryModel>>(jsonResponse); 

       // Set the List Item with the countries. 
       IEnumerable<SelectListItem> countries = countryModel.Select(x => new SelectListItem() { Value = x.name, Text = x.name }); 

       // Create a ViewBag property with the final content. 
       ViewBag.Countries = countries; 
      } 
      return View(); 
     } 
    } 
} 

Вид: Index.cshtml

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@Html.DropDownList("Countries") 

Результат:

enter image description here

+0

Я проголосовал за ваш ответ, большое спасибо. У меня есть еще один вопрос: как я могу проанализировать данные в https://restcountries.eu/rest/v1/all в объекте в контроллере, а затем передать его для просмотра? – HungDQ

+1

Хорошо, позвольте мне уточнить свой ответ. –

+1

Проверьте мое обновление. –