@Misuta

Почему новый элемент списка каждый раз заменяет последний элемент списка?

Контролер:
using Microsoft.AspNetCore.Mvc;
using Auto_parts_store.Models.ViewModels;

namespace Auto_parts_store.Controllers
{
    public class HomeController : Controller
    {
        List<EngineOil> oils = new List<EngineOil>()
        {
            new() { Id = 1, Name = "Лукойл Genesis Claritech 5W-30" },
            new() { Id = 2, Name = "SHELL Helix Ultra 5W-40" },
            new() { Id = 3, Name = "MOBIL Super 3000 X1 5W-40" }
        };

        [HttpGet]
        public IActionResult Index()
        {
            return View(oils);
        }

        [HttpPost]
        public IActionResult Index(EngineOil oil)
        {
            oil.Id = oils.Count + 1;
            oil.Name = oil.Name;
            oils.Add(oil);
            return View(oils);
        }
    }
}


Представление:
@using Auto_parts_store.Models.ViewModels
@model IEnumerable<EngineOil>

<!DOCTYPE html>
<html>
    <head>
        <title>Auto parts store</title>
        <meta charset="utf-8" />
    </head>
    <body>

    <form method="post">
        <label>Название масла:</label>
        <br />
        <input type="text" name="name" />
        <br />
        <input type="submit" value="Добавить" />
    </form>

    <br />
    <label>Моторные масла:</label>
    <br />
    @foreach (var item in Model)
    {
        <p>@item.Id  @item.Name</p>
    }
    <br />

    </body>
</html>


При попытки добавить новый элемент в список, каждый раз новый элемент заменяет последний элемент списка:
63f4616887db7037597274.png
63f4616eaf6b3026354908.png
63f46174e4c1e211819232.png

Почему так и как это поправить?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@OwDafuq
Вы создаете List с маслами в контроллере каждый раз, когда к контроллеру обращаются.
1 запрос = 1 экземпляр контроллера, соответственно получаете на каждый запрос - новый List. Вынесите в сервис/базу/синглтон объект/сделайте list - static/и т.д. свой список масел, чтобы он не создавался постоянно, а жил где-то отдельно от контроллера.

p.s. - oil.Name = oil.Name - зачем?)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы