Razor 重新加载时加载包含数据的视图时出错
我有一个用产品数据加载的视图。当我按下“添加到购物篮”按钮时,我希望再次重新加载同一页面,但出现以下错误:Razor 重新加载时加载包含数据的视图时出错,razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,我有一个用产品数据加载的视图。当我按下“添加到购物篮”按钮时,我希望再次重新加载同一页面,但出现以下错误: Object reference not set to an instance of an object. 视图: @型号列表 @foreach(电子商务.模型.家庭模型.模型中的产品) {//以上错误点在这里!!!!!!!!!!! 使用(Html.BeginForm()) { } } 控制器
Object reference not set to an instance of an object.
视图:
@型号列表
@foreach(电子商务.模型.家庭模型.模型中的产品)
{//以上错误点在这里!!!!!!!!!!!
使用(Html.BeginForm())
{
}
}
控制器:
public ActionResult BuyProducts()
{
List<Models.HomeModels.Product> products = new List<Models.HomeModels.Product>();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
//Method to load data into products
}
}
TempData["products"] = products;
return View(products);
}
[HttpPost]
[AllowAnonymous]
public ActionResult BuyProducts(string productID)
{
string id = productID;
return View(TempData["products"]);
}
public ActionResult购买产品()
{
列表产品=新列表();
使用(var reader=command.ExecuteReader())
{
while(reader.Read())
{
//方法将数据加载到产品中
}
}
TempData[“产品”]=产品;
返回视图(产品);
}
[HttpPost]
[异名]
public ActionResult BuyProducts(字符串productID)
{
字符串id=productID;
返回视图(TempData[“产品]);
}
TempData
只存在于一个请求中,因此当您尝试发回它时,它就消失了(这就是为什么会出现错误-TempData[“产品”]
为null
)。无论哪种方式,都应该使用post重定向get模式,如下所示:
[HttpPost]
[AllowAnonymous]
public ActionResult BuyProducts(string productID)
{
string id = productID;
return RedirectToAction("BuyProducts");
}
主要原因是,如果用户刷新页面,并且您从post返回了一个视图,则数据将再次发布,从而导致重复。
TempData
不会在请求之间持久化。您可以使用会话
或查看数据
保存“产品”
试试其中一个,看看是否能解决您的问题。感谢您提供的信息,因为它非常有用。不过我希望能有更简单的事情。谢谢你,这正是我想要的。因为他说的原因,这才是正确的方法。您可以将产品列表缓存在某个位置,这样您就不会每次在重定向时调用数据库,但这是一个单独的主题。我该如何缓存它?或者你能把我引向一些资源吗?@Neeta-Darin是asp.net mvc 3的一个很好的资源,你应该浏览他的一些答案,因为他提供了很多很好的内容。以下是他关于这个话题的一个答案:
[HttpPost]
[AllowAnonymous]
public ActionResult BuyProducts(string productID)
{
string id = productID;
return RedirectToAction("BuyProducts");
}