【发布时间】:2023-01-09 17:45:26
【问题描述】:
我正在创建这样的发票: 对于登录用户,我将发票和发票单位保存到数据库(一张发票有多个发票单位),对于未登录的用户,我试图将数据保存到会话中
[HttpPost]
public ActionResult Create(Invoice invoice)
{
var userId = User.Claims.FirstOrDefault(c => c.Type == "UserId")?.Value;
if (userId is not null)
{
invoice.UserId = Guid.Parse(userId.ToString());
DateTime dateTime = DateTime.Now;
invoice.DateCreated = dateTime;
foreach (var invoiceUnit in invoice.InvoiceUnits)
{
db.InvoiceUnits.Add(invoiceUnit);
}
db.Add(invoice);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
invoice.Id = Guid.NewGuid();
var invoicesFromSession = GetInvoicesFromSession();
var invoiceUnitsFromSession = GetInvoiceUnitsFromSession();
DateTime dateTime = DateTime.Now;
invoice.DateCreated = dateTime;
if (invoice is not null)
{
invoicesFromSession.Add(invoice);
HttpContext.Session.SetString("invoice", JsonSerializer.Serialize(invoicesFromSession));
foreach(var invoiceUnit in invoice.InvoiceUnits)
{
invoiceUnit.Id = new Guid();
invoiceUnit.InvoiceId = invoice.Id;
HttpContext.Session.SetString("invoiceUnit", JsonSerializer.Serialize(invoiceUnitsFromSession));
invoiceUnitsFromSession.Add(invoiceUnit);
}
}
return RedirectToAction("Index");
}
}
我从这样的会话中获取发票单位:
private List<InvoiceUnit> GetInvoiceUnitsFromSession()
{
HttpContext.Session.LoadAsync();
var sessionString = HttpContext.Session.GetString("invoiceUnit");
if (sessionString is not null)
{
return JsonSerializer.Deserialize<List<InvoiceUnit>>(sessionString);
}
return Enumerable.Empty<InvoiceUnit>().ToList();
}
然后我试图调用编辑控制器中的函数
var sessionInvoices = GetInvoicesFromSession();
var sessionInvoiceUnits = GetInvoiceUnitsFromSession();
var invoiceFromDbSession = sessionInvoices.FirstOrDefault(i => i.Id == id);
List<InvoiceUnit> invoiceUnitsForInvoiceSession = new List<InvoiceUnit>();
foreach (var invoiceUnit in sessionInvoiceUnits)
{
if (invoiceUnit.InvoiceId == id)
{
invoiceUnitsForInvoiceSession.Add(invoiceUnit);
}
}
GenericModel sessionData = new GenericModel(invoiceUnitsForInvoiceSession, invoiceFromDbSession);
return View(sessionData);
由于某种原因,当我在编辑控制器中调用 GetInvoiceUnitsFromSession(); 以检索特定发票的所需发票单元时,我只收到每张发票的一个发票单元(我输入的第一个发票)。当我在创建函数中调试 invoiceUnitsFromSession 变量时,单位数量正好适合特定发票,因此我认为我尝试检索会话的方式一定存在问题。知道要进行哪些更改才能检索我收到的所有发票的所有发票单元,以便我可以在编辑控制器中获取它们吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc