在HttpPost中删除静态成员

时间:2016-07-21 18:50:49

标签: c# controller asp.net-core

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

[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);
    }

1 个答案:

答案 0 :(得分:0)

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

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

然后,当您在“详细信息”页面上加载页面时,数据库将保存模型并成功检索它。

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