2 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
除非我弄錯(cuò)了,否則我相信問(wèn)題就出在 lambda 函數(shù)上:
代替
@Html.DisplayFor(modelItem => item.IdTamanhoNavigation) ^^^
您需要引用正確的輸入?yún)?shù)(modelItem):
@Html.DisplayFor(modelItem => modelItem.IdTamanhoNavigation) ^^^

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
我忘了說(shuō)我一直在使用 JSon 將該列表序列化為會(huì)話(huà)。但我必須在 Produto Model 類(lèi)的那些相關(guān)方法上使用 [JsonIgnore],如果沒(méi)有,當(dāng)包含這些相關(guān)表值時(shí),我會(huì)從 Newtonsoft.Jason 收到錯(cuò)誤。
正如你在下面看到的
在 ShoppingCart 控制器類(lèi)上
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:檢測(cè)到類(lèi)型為“Pianino.Models.Produto”的自引用循環(huán)。路徑“[0].IdCategoriaNavigation.Produto”。Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer、對(duì)象值、JsonProperty 屬性、JsonContract 合約、JsonContainerContract 容器合約、JsonProperty 容器屬性)
即使評(píng)論第一個(gè)包括,我對(duì) IdTamanhoNavigation 和 IdTipoMassaNavigation 也有相同的看法。
因此,使用如下所示的 [JsonIgnore],我修復(fù)了該錯(cuò)誤。另一方面,當(dāng)我從 ShoppingCart Controller 類(lèi)上的會(huì)話(huà)獲取列表時(shí),這些值變?yōu)?null。
關(guān)于產(chǎn)品型號(hào)類(lèi)
[JsonIgnore]
public virtual Categoria IdCategoriaNavigation { get; set; }
[JsonIgnore]
public virtual Tamanho IdTamanhoNavigation { get; set; }
[JsonIgnore]
public virtual TipoMassa IdTipoMassaNavigation { get; set; }
在實(shí)用程序類(lèi)上
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 關(guān)注
- 149 瀏覽
添加回答
舉報(bào)