第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么使用 List<> 時(shí)相關(guān)表值在 HttpContext.Session.Get

為什么使用 List<> 時(shí)相關(guān)表值在 HttpContext.Session.Get

C#
汪汪一只貓 2023-08-13 16:22:00
我正在開(kāi)發(fā)一個(gè)購(gòu)物車(chē)(使用 MVC Asp.Net Core 2.2 和 EF)。有3個(gè)表(模型類(lèi)):產(chǎn)品;尺寸(與產(chǎn)品表相關(guān));TipoMassa(與 Produto 表相關(guān))。在 ProductController 類(lèi)中,我創(chuàng)建了一個(gè)存儲(chǔ)在 Session 中的列表,以便在 CartController 類(lèi)中獲取此列表。但是,當(dāng)我嘗試在 CartController 類(lèi)中獲取該列表時(shí),相關(guān)表(Tamanho 和 TipoMassa)中的值為空。該列表僅包含 Produto 表值。我該如何修復(fù)它?控制器類(lèi)產(chǎn)品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 為空。代碼如下。購(gòu)物車(chē)控制器類(lèi)public IActionResult Index(){    List<Produto> itens = HttpContext.Session.Get<List<Produto>>            ("itens");    if (itens == null)    {        itens  = new List<Produto>();    }    return View(itens.ToList());}當(dāng)我嘗試在視圖中顯示值時(shí),相關(guān)表值(IdCategoriaNavigation、IdTamanhoNavigation 和 IdTipoMassaNavigation)為空。代碼如下。產(chǎn)品型號(hào)類(lèi)別public partial class Produto{    public Produto()    {        Cardapio = new HashSet<Cardapio>();        ItensPedido = new HashSet<ItensPedido>();        Promocao = new HashSet<Promocao>();    }
查看完整描述

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)
                                 ^^^


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
慕標(biāo)琳琳

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);

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)