c# - dotnet core 2 Web C# 对象引用未设置为对象的实例?
问题描述
尝试将产品添加到购物车时出现空异常
在下面的代码部分中,当我运行项目时,它似乎可以正常工作,但是当我尝试将产品添加到购物车时,它会抛出异常。我真的很紧张……我要离开这个了。
@model Produto
@{
<div class="card text-right" style="width: 20rem;">
<div class="card-body">
<h4 class="card-title">@Model.Nome</h4>
<h3 class="card-title">@Model.Preco.ToString("c")</h3>
</div>
<form id="@Model.ProdutoID" asp-action="AddPCarrinho"
asp-controller="Carrinho" method="post">
<input type="hidden" asp-for="ProdutoID" />
<input type="hidden" name="returnUrl"
value="@ViewContext.HttpContext.Request.PathAndQuery()" />
<span class="card-text p-1">
@Model.Descricao
<button type="submit" class="btn btn-success btn-sm pull-right" style="float:right">
Add to Cart
</button>
</span>
</form>
</div>
}
这是控制器
public class CarrinhoController : Controller
{
private IProdutoRepositorio repositorio;
public CarrinhoController(IProdutoRepositorio repo)
{
repositorio = repo;
}
public ViewResult Index(string returnUrl)
{
return View(new CarrinhoIndexViewModel
{
Carrinho = GetCarrinho(),
ReturnUrl = returnUrl
});
}
public RedirectToActionResult AddPCarrinho(Guid produtId, string returnUrl)
{
Produto produto = repositorio.All
.FirstOrDefault(p => p.ProdutoID == produtId);
if (produtId != null)
{
Carrinho carrinho = GetCarrinho();
carrinho.AddItem(produto, 1);
SalvarCarrinho(carrinho);
}
return RedirectToAction("Index", new { returnUrl });
}
}
这是视图模型
namespace SportsStore.Models.ViewModels{
public class CarrinhoIndexViewModel{
public Carrinho Carrinho { get; set; }
public string ReturnUrl { get; set; }
}
}
这是我得到异常空引用的类
public class Carrinho{
private List<CartLine> lineCollection = new List<CartLine>();
public virtual void AddItem(Produto produto, int quantidade){
CartLine line = lineCollection
.Where(p => p.Produto.ProdutoID == produto.ProdutoID)
.FirstOrDefault();
if (line == null)
{
lineCollection.Add(new CartLine
{
Produto = produto,
Quantidade = quantidade
});
}
else
{
line.Quantidade += quantidade;
}
}
json.net 类
public static class SessionExtensions
{
public static void SetJson(this ISession sessao, string key, object value)
{
sessao.SetString(key, JsonConvert.SerializeObject(value));
}
public static T GetJson<T>(this ISession sessao, string key)
{
var sessaoData = sessao.GetString(key);
return sessaoData == null
? default(T) : JsonConvert.DeserializeObject<T>(sessaoData);
}
}
解决方案
在控制器中,更改行
if (produtId != null)
至
if (produto != null)
就目前而言,您没有检查是否从存储库中获取了某些内容。
推荐阅读
- database - 重复日期 POWER BI
- javascript - 在 shadow DOM 中导入和使用 Javascript
- html - 如何将 textarea 的默认边框更改为浅灰色?
- sql - SQLite 随机子查询结果
- php - 如何使用 php 从 json 文件将数组转换为 ArrayObject
- c# - 如何在 C# 中使用带有服务帐户的 gmail api 或 google Oauth 来发送邮件?
- oracle - Endeca Experience Manager 绩效提升
- python - webdriver 错误“urllib3.exceptions.ProxySchemeUnknown:代理 URL 没有方案,应以 http:// 或 https:// 开头”
- google-chrome - 设置密码以关闭 chrome 并将 chrome 作为弹出窗口启动
- python - python中条形图顶部的值计数位置错误