在下面的代码部分中,当我运行项目时,它似乎正常工作,但是当我尝试将产品添加到购物车时,它会抛出异常。我真的很紧张......我准备离开这个。
@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;
}
}
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);
}
}
答案 0 :(得分:-1)
在控制器中,更改行
if (produtId != null)
到
if (produto != null)
就目前而言,您并未检查是否从存储库中获取了某些内容。