gcogco10 Ответов: 1

System.invalidoperationexception: 'нет элемента viewdata типа 'ienumerable<selectlistitem>', который имеет ключ 'listcountries.country'.'


Привет Команда

Я пытаюсь получить свой список стран с помощью dropdownlistFor, каждый раз, когда мое приложение загружается, оно выбрасывает это исключение и нуждается в некоторой помощи, чтобы решить его, но оно не сохраняется в моей базе данных.

Что я уже пробовал:

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

            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)
                {
                    RegistrationTrainingForm infoLst = new RegistrationTrainingForm();
                    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;
        }


        // 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;
        }


@using (Html.BeginForm("Index", "Home", FormMethod.Post))
                               {
                                   <div class="col-sm-3">
                                       @Html.DropDownListFor(model=>model.ListCountries.Country, ViewBag.CountryList as SelectList)
                                   </div>
                               }

Gerry Schmitz

Пришло время сделать несколько постоянных POCO's вместо того, чтобы придумывать имена на лету, такие как "Value" и "Text".

1 Ответов

Рейтинг:
0

Jin Vincent Necesario

Привет,

Кажется, ничего страшного на первый взгляд. Тем не менее, я увидел кое-что, что могло быть причиной исключения.

Вы можете изменить свой код, начиная с потока, используя оператор using.

См. пример кода ниже.

using (StreamReader src = new StreamReader (new FileStream (filePath, FileMode.Open, FileAccess.Read)) {

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

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

                lst.Add (infoLst);
            }

            src.Close ();
            src.Dispose ();
        }


Надеюсь, вы можете начать с этого кода выше и надеяться, что это поможет.

Овации,
Джин