Как сделать выпадающий список для доступа к данным в вашем SelectItemList с помощью asp. net mvc? - PullRequest
0 голосов
/ 17 марта 2020

Я использую DropDownlist для того, чтобы получить страну всего мира. Я приложил файл (country_list.txt), используя srcFilePath. Я получаю сообщение об ошибке: «Нет элемента ViewData типа« IEnumerable », который имеет ключ« SelectedCountryId ». Это может быть проблемой, поскольку мой EditFormTrainingRegViewModel имеет это поле SelectedCountry в качестве первичного ключа. Его объявили как publi c int? SelectedCountryId {get; set;}

          // List for countries.
                private IEnumerable<SelectListItem> GetCountryList()
                {
                    SelectList listcn = null;
                    try
                    {
                        var list = this.LoadData().Select(p => new SelectListItem
                        {
                            Value = p.Country_Id.ToString(),
                            Text = p.Country_Name
                        });
                        listcn = new SelectList(list, "Value", "Text");

                    }catch(Exception ex)
                    {
                        throw ex;
                    }
                    return listcn;
                }



                public ActionResult DropDownSelect()
                {
                    EditTrainingRegFormViewModel model = new EditTrainingRegFormViewModel();

                    model.SelectedCountryId = 0;

                    this.ViewBag.CountryList = this.GetCountryList();
                    return this. View(model);
                }

             // Loading data for country list.

                    private List<EditTrainingRegFormViewModel> LoadData()
                {
                    List<EditTrainingRegFormViewModel> lst = new List<EditTrainingRegFormViewModel>();

                    try
                    {
                        string line = string.Empty;
                        string srcFilePath = "Content/files/country_list.txt";
                        var rootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
                        var fullPath = Path.Combine(rootPath, srcFilePath);
                        string filePath =  new Uri(fullPath).LocalPath;
                        StreamReader src = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read));

                        // while to read the file
                        while((line = src.ReadLine()) !=null) {
                          EditTrainingRegFormViewModel infoLst = new EditTrainingRegFormViewModel();
                            string[] info = line.Split(',');

                            //Setting
                            infoLst.Country_Id = Convert.ToInt32(info[0].ToString());
                            infoLst.Country_Name = info[1].ToString();

                            lst.Add(infoLst);
                        }
                        src.Dispose();
                        src.Close();
                    }catch(Exception ex)
                    {
                        Console.Write(ex);
                    }
                    return lst;
                }
    //View
    @Html.DropDownListFor(m=>m.SelectedCountryId, this.ViewBag.CountryList as SelectList, new {@class = "form-control"})

// Model class
 public class EditTrainingRegFormViewModel
    {
        public string Title { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public string Position { get; set; }

        public string Company { get; set; }

        public string Address { get; set; }

        [Display(Name = "Choose country")]
        public int ? SelectedCountryId { get; set; }

        public string Code { get; set; }

        public string City { get; set; }

        public string State { get; set; }

        public string Cell_Number { get; set; }

        public List<string> Dietary_requirement { get; set; }

        public string Email { get; set; }

        public int Country_Id { get; set; }

        public string Country_Name { get; set; }


    }
...