正在HttpPost中删除静态成员

本文关键字:静态成员 删除 HttpPost 正在 | 更新日期: 2023-09-27 17:58:10

在ASP.NetCore MVC控制器中,我使用下面的HttpPost Create方法将一个新对象(Restaurant)添加到静态列表_restaurantData中,然后重定向到新Restaurant的"Details"页面。在调试时,我可以验证新的restaurant是否已添加到具有所有正确属性的_restaurantData中,并且正确的id是否已传递到RedirectToAction方法中。然而,一旦实际调用了"Details",新的Restaurant对象就会从_restaurantData中删除,因此"model"为null。在"Create"的退货声明和"Details"的开头之间,新餐厅怎么可能从列表中删除?我怎么能解决这个问题!

[HttpPost]
    public IActionResult Create(RestuarantEditViewModel model)
    {
        var restaurant = new Restaurant();
        restaurant.Name = model.Name;
        restaurant.Cuisine = model.Cuisine;
        _restaurantData.Add(restaurant);
        return RedirectToAction("Details", new { id = restaurant.Id });
    }
    public IActionResult Details(int id)
    {
        var model = _restaurantData.Get(id);
        if (model == null)
        {
            return RedirectToAction("Index");
        }
        return View(model);
    }

这是将餐厅添加到列表中的代码。

public void Add(Restaurant newRestaurant)
    {
        newRestaurant.Id = _restaurants.Max(r => r.Id) + 1;
        _restaurants.Add(newRestaurant);
    }

正在HttpPost中删除静态成员

重定向时,页面(及其底层控制器类)的状态将丢失,包括静态变量。您需要做的是在添加新实例后保存:

_restaurantData.Add(restaurant);
_restaurantData.SaveChanges(); // Assuming DbContext

然后,当您的页面加载到Details页面时,数据库将保存模型并成功检索它。

如果_restaurantData不是DbContext,则需要它有某种方法在页面加载之间保存数据。