Nano Hash - криптовалюты, майнинг, программирование

Как сохранить выбранный элемент в раскрывающемся списке в моей базе данных?

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

"Нет элемента ViewData типа "IEnumerable" с ключом "Факультеты"

Я все еще не умею программировать MVC/С#, пожалуйста, помогите, вот мой код ниже; заранее спасибо!

Моя модель данных

public string Faculty { get; set; }

Мой контроллер

public ActionResult Register()
{
   DataClasses1DataContext db = new DataClasses1DataContext();
   ViewBag.Faculties = new SelectList(db.Faculties, "Id", "Name");
   return View();
}

Мой взгляд

<div class="form-group">
    @Html.LabelFor(model => model.Faculty, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownList("Faculties","Select Faculty")
        @Html.ValidationMessageFor(model => model.Faculty, "", new { @class = "text-danger" })
    </div>
</div>


Ответы:


1

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

    @Html.DropDownList("Faculties", ViewBag.Faculties as IEnumerable<SelectListItem>, 
                       "Select Faculty");

Обратите внимание, что ваш ViewBag.Faculties должен быть преобразован в Enumerable<SelectListItem>.

Чтобы получить выбранное значение раскрывающегося списка в контроллере, вы можете использовать следующий метод:

var value = Request["Faculties"];

Получив значение, вы можете сохранить его в базе данных.

Обновление:

Хорошим подходом будет привязка вашего представления к модели, что, я думаю, вы уже сделали, так как я вижу, что вы используете model.Faculty. Таким образом, раскрывающийся список должен выглядеть примерно так, как показано ниже:

@Html.DropDownList(model => model.Faculty,ViewBag.Faculties as IEnumerable<SelectListItem>,
                  "Select Faculty");

И ваш контроллер, где публикуются данные, должен выглядеть примерно так:

[HttpPost]
public ActionResult Register(YourModel model)
{
    var selectedFaculty = model.Faculty; //Selected Value
    //Save it in database
}
24.11.2015
  • Я сделал, как вы предложили @Saket, и я понимаю логику вашего мнения. а для HttpPost я на самом деле не слишком продвинут в программировании, вы не возражаете, я понимаю ту часть, где я должен получить факультеты из БД var value = Request[Faculties]; но я работаю над этим, чтобы попытаться реализовать его в моем контроллере. В My Controller я также добавляю другие поля для регистрации, они могут быть сохранены в базе данных, единственная проблема, с которой я столкнулся, связана с этим DropDown. 25.11.2015

  • 2

    Попробуйте изменить эту строку:

    ViewBag.Faculties = new SelectList(db.Faculties, "Id", "Name");
    

    к следующему

    ViewData["Faculties"] = new SelectList(db.Faculties, "Id", "Name");
    

    ViewBag и ViewData — это две отдельные конструкции, которые нельзя использовать взаимозаменяемо.

    24.11.2015
  • извините за поздний ответ @Inari, спасибо, я сделал, как вы сказали, но все равно выдает ту же ошибку. этот код, на мой взгляд, используется правильно? @Html.DropDownList (факультеты, выберите факультет) 25.11.2015

  • 3

    Просто названия вашей собственности и вашего ViewBag разные. измените свое ViewBag имя, чтобы оно соответствовало названию объекта.

    ViewBag.Faculty = new SelectList(db.Faculties, "Id", "Name");
    

    Ваш HTML будет:

     @Html.DropDownList("Faculty ","Select Faculty")
    

    В качестве альтернативы и (предпочтительно) используйте привязку модели вместо ViewBag

    Модель

    public string Faculty { get; set; }
    public IList<SelectListItem> Faculties {get;set;}
    

    Контроллер

    Model.Faculties = new SelectList(db.Faculties, "Id", "Name");
    return View(Model);
    

    HTML (просмотр)

    @Html.DropDownListFor(m => m.Faculty , Model.Faculties )
    
    24.11.2015
  • Большое спасибо @Moe, есть что-то, что я определенно делаю неправильно, потому что это дает мне больше ошибок, когда я пытаюсь изменить код, чтобы он соответствовал вашему предложению. Но спасибо за вклад. есть ошибки в Model.Faculties и возвращают View(Moldel); в контроллере 25.11.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..