在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);
}
答案 0 :(得分:0)
重定向时,页面状态(及其底层控制器类)将丢失,包括静态变量。您需要做的是在添加新实例后保存:
_restaurantData.Add(restaurant);
_restaurantData.SaveChanges(); // Assuming DbContext
然后,当您在“详细信息”页面上加载页面时,数据库将保存模型并成功检索它。
如果_restaurantData
不是DbContext
,则需要它以某种方式在页面加载之间保存数据。