2 回答
TA贡献2012条经验 获得超12个赞
除非我弄错了,否则我相信问题就出在 lambda 函数上:
代替
@Html.DisplayFor(modelItem => item.IdTamanhoNavigation) ^^^
您需要引用正确的输入参数(modelItem):
@Html.DisplayFor(modelItem => modelItem.IdTamanhoNavigation) ^^^
TA贡献1830条经验 获得超9个赞
我忘了说我一直在使用 JSon 将该列表序列化为会话。但我必须在 Produto Model 类的那些相关方法上使用 [JsonIgnore],如果没有,当包含这些相关表值时,我会从 Newtonsoft.Jason 收到错误。
正如你在下面看到的
在 ShoppingCart 控制器类上
public ActionResult AddToCart(IFormCollection collection)
{
...
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);
...
The produtoContex here, normally has all the values from the related tables.
{PianoPizza.Models.Categoria}
{PianoPizza.Models.Tamanho}
{PianoPizza.Models.TipoMassa}
But when I set the List on Session I got the Json error.
HttpContext.Session.Set("itens", itens);
^^^^
...
}
JsonSerializationException:检测到类型为“Pianino.Models.Produto”的自引用循环。路径“[0].IdCategoriaNavigation.Produto”。Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer、对象值、JsonProperty 属性、JsonContract 合约、JsonContainerContract 容器合约、JsonProperty 容器属性)
即使评论第一个包括,我对 IdTamanhoNavigation 和 IdTipoMassaNavigation 也有相同的看法。
因此,使用如下所示的 [JsonIgnore],我修复了该错误。另一方面,当我从 ShoppingCart Controller 类上的会话获取列表时,这些值变为 null。
关于产品型号类
[JsonIgnore]
public virtual Categoria IdCategoriaNavigation { get; set; }
[JsonIgnore]
public virtual Tamanho IdTamanhoNavigation { get; set; }
[JsonIgnore]
public virtual TipoMassa IdTipoMassaNavigation { get; set; }
在实用程序类上
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) :
JsonConvert.DeserializeObject<T>(value);
}
}
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报