【发布时间】:2019-08-06 21:25:08
【问题描述】:
我正在开发一个购物车(使用 MVC Asp.Net Core 2.2 和 EF)。
有 3 个表(模型类):
- 产品;
- Tamanho(与 Produto 表相关);
- TipoMassa(与 Produto 表相关)。
在 ProductController 类中,我创建了一个存储在 Session 中的列表,以便在 CartController 类中获取此列表。
但是,当我尝试在 CartController 类中获取该列表时,相关表(Tamanho 和 TipoMassa)中的值是空的。该列表仅包含 Produto 表值。
我该如何解决?
产品控制器类
public ActionResult AddToCart(IFormCollection collection)
{
string Nome = collection["Nome"];
byte IdTamanho = Convert.ToByte(collection["IdTamanho"]);
byte IdTipoMassa = Convert.ToByte(collection["IdTipoMassa"]);
var produtoContext = _context.Produto
.Include(c => c.IdCategoriaNavigation)
.Include(c => c.IdTamanhoNavigation)
.Include(c => c.IdTipoMassaNavigation)
.FirstOrDefault(p => p.Nome == Nome && p.IdTamanho == IdTamanho
&& p.IdTipoMassa == IdTipoMassa);
if (produtoContext == null)
{
return NotFound();
}
// Add itens na Sesssion
List<Produto> itens = new List<Produto>();
itens = HttpContext.Session.Get<List<Produto>>("itens");
if (itens == null)
{
itens = new List<Produto>();
}
itens.Add(produtoContext);
HttpContext.Session.Set("itens", itens);
TempData["save"] = "Adicionado com sucesso";
return RedirectToAction(nameof(Index), "Produto");
}
- 工作正常! 但是在 [CartController] IdCategoriaNavigation 中,IdTamanhoNavigation 和 IdTipoMassaNavigation 为空。代码如下。
购物车控制器类
public IActionResult Index()
{
List<Produto> itens = HttpContext.Session.Get<List<Produto>>
("itens");
if (itens == null)
{
itens = new List<Produto>();
}
return View(itens.ToList());
}
- 当我尝试在视图中显示值时,相关的表值(IdCategoriaNavigation、IdTamanhoNavigation 和 IdTipoMassaNavigation)为空。代码如下。
购物车视图
@foreach (var item in Model)
{
<tr>
<td>
<small class="text-muted"> 2x </small>
</td>
<td>
@Html.DisplayFor(modelItem => item.Nome)
<br />
<small class="text-muted">@Html.DisplayFor(modelItem => item.Descricao)</small>
@if (item.IdCategoria == 1)
{
<small class="text-dark font-italic">
<label for="idTamanho">
@Html.DisplayFor(modelItem => item.IdTamanhoNavigation)
</label>
@Html.DisplayFor(modelItem => item.IdTamanhoNavigation.Valor)
</small>
<small class="text-dark font-italic">
<label for="idTamanho"> @Html.DisplayFor(model => item.IdTipoMassaNavigation)</label>
@Html.DisplayFor(modelItem => item.IdTipoMassaNavigation.Valor)
</small>
}
</td>
<td class="text-right">
2x R$ @Html.DisplayFor(modelItem => item.Preco)
</td>
<td class="align-content-end">
<a asp-controller="Produto" asp-action="RemoveFromCart" asp-route-id="@item.IdProduto" class="text-white">
<i class="fa fa-times text-info"></i>
</a>
</td>
</tr>
}
产品模型类
public partial class Produto
{
public Produto()
{
Cardapio = new HashSet<Cardapio>();
ItensPedido = new HashSet<ItensPedido>();
Promocao = new HashSet<Promocao>();
}
public int IdProduto { get; set; }
public int IdCategoria { get; set; }
public byte IdTamanho { get; set; }
public byte IdTipoMassa { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public string Imagem { get; set; }
[Column(TypeName = "decimal(18, 2)")]
public decimal Preco { get; set; }
public bool IsAtivo { get; set; }
[JsonIgnore]
public virtual Categoria IdCategoriaNavigation { get; set; }
[JsonIgnore]
public virtual Tamanho IdTamanhoNavigation { get; set; }
[JsonIgnore]
public virtual TipoMassa IdTipoMassaNavigation { get; set; }
public virtual ICollection<Cardapio> Cardapio { get; set; }
public virtual ICollection<ItensPedido> ItensPedido { get; set; }
public virtual ICollection<Promocao> Promocao { get; set; }
}
Tamanho 模型类
public partial class Tamanho
{
public Tamanho()
{
Produto = new HashSet<Produto>();
}
public byte IdTamanho { get; set; }
public string Valor { get; set; }
public virtual ICollection<Produto> Produto { get; set; }
}
TipoMassa 模型类
public partial class TipoMassa
{
public TipoMassa()
{
Produto = new HashSet<Produto>();
}
public byte IdTipoMassa { get; set; }
public string Valor { get; set; }
public virtual ICollection<Produto> Produto { get; set; }
}
我想在 ShoppingCart 视图中显示所有值。
【问题讨论】:
-
尝试使用 Session.Add 而不是 Session.Set
标签: c# asp.net-core model-view-controller