【问题标题】:Static member being removed in HttpPost在 HttpPost 中删除的静态成员
【发布时间】:2016-07-22 04:04:51
【问题描述】:

在 ASP.NetCore MVC 控制器中,我使用下面的 HttpPost Create 方法将新对象(餐厅)添加到静态列表 _restaurantData,然后重定向到新餐厅的“详细信息”页面。在调试时,我可以验证新餐厅是否已添加到具有所有正确属性的 _restaurantData 中,并且正确的 id 是否已传递给 RedirectToAction 方法。但是,一旦实际调用了“详细信息”,新的 Restaurant 对象就已从 _restaurantData 中删除,因此“模型”为空。新餐厅怎么可能从“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);
    }

【问题讨论】:

    标签: c# controller asp.net-core


    【解决方案1】:

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

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

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

    如果_restaurantData 不是DbContext,您需要它有某种方式来保存页面加载之间的数据。

    【讨论】:

    • 它不是 DbContext,它只是我制作的一个类。考虑到这一点,我有办法让它省钱吗?
    • 您必须将数据存储在某处,因为页面状态在页面加载之间丢失。查看实体框架和DbContext:docs.efproject.net/en/latest
    • 好的。我只是很困惑,因为我一直在关注 T 的教程(有效),但我的却没有。页面状态在页面加载之间总是丢失还是新的?
    • 可以发教程的链接吗?也许我可以看到他们在做什么来保存加载之间的页面状态。
    • Scott Allen here 的复数观点,ASP.NET Core 1.0 基础。没有帐户可能无法查看。我在任何保存页面状态的代码中都找不到任何东西,它通常在控制器中吗? _restaurantData 是控制器类的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多