dlnzki Ответов: 1

Ошибка в поиске с помощью выпадающего списка


Привет. Я попытался найти данные с помощью выпадающего списка, но получил ошибку, что нет элемента viewdata типа IEnumerable<selectlistitem>, который имеет ключ ‘id’

Я имею в виду этот учебник
https://youtu.be/6X4pZW3onP8

но я действительно не понимаю, почему они используют функцию post в видео для выпадающего списка.

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

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

В виду:
@model IEnumerable<SearchFunctionDemo.Models.TesterModel>

@using (Html.BeginForm())
{
@Html.DropDownList(“id”, null, htmlAttributes: new { @class=“form-control”})
<input type=“Submit” value=“Search”>
}

@foreach(var item in ViewBag.TesterID)
{
@item.TesterID
@item.Name
}


В контроллерах:
Public ActionResult Index()
{
var query=(from c in db.Testers
                   select new TesterModel
                   {
                     Name=c.Name,
TesterID=c.TesterID}).ToList();
ViewBag.TesterID=query;
return View();
}

[HttpPost]
Public ActionResult Index(int id)
{
var query=(from c in db.Testers
where c.TesterID == id
select new Testeramodel
{
Name=c.Name,
TesterID=c.TesterID
}).ToList();
ViewBag.TesterID=new SelectList(query, “TesterID”,”Name”);
}

1 Ответов

Рейтинг:
0

Richard Deeming

Ты отдал свою жизнь. DropDownList имя "id" Поэтому вам необходимо хранить SelectList в ViewBag.id.

Однако код выглядит довольно запутанным. Указать @model для представления, но вы только передаете модель из HttpPost метод. В один метод, вы сохраняете List<TesterModel> в ViewBag, но и в других можно хранить SelectList И вы ничего не делаете с представленным идентификатором.

Я был бы склонен использовать HttpGet метод для обоих запросов, так как вы отправляете только один int ценность:

[HttpGet]
public ActionResult Index(int? id = default)
{
    var testers = db.Testers.Select(c => new { c.TesterID, c.Name }).ToList();
    
    ViewBag.TesterList = testers.Select(c => new SelectListItem
    {
        Value = c.TesterID.ToString(),
        Text = c.Name,
        Selected = c.TesterID == id,
    });
    
    return View();
}
@using (Html.BeginForm("Index", "YourControllerName", FormMethod.Get))
{
    @Html.DropDownList("id", (IEnumerable<SelectListItem>)ViewBag.TesterList, "-Select One-", new { @class = "form-control" })
    <input type="submit" value="Search">
}