C# 无法更新asp.net core 2.2中的会话内数据
我想使用控制器更新会话数据(列表类型)。但它不起作用,它给了我一个错误 这是我的密码:C# 无法更新asp.net core 2.2中的会话内数据,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我想使用控制器更新会话数据(列表类型)。但它不起作用,它给了我一个错误 这是我的密码: [HttpGet] public IActionResult Cart() { List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
[HttpGet]
public IActionResult Cart()
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
if (spray == null)
{
spray = new List<Spray>();
}
return View(spray);
}
[HttpPost]
public IActionResult Cart(int id)
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
for (int i = 0; i < 10; i++)
{
if (spray[i].Id.Equals(id))
{
spray[i].Quantity++;
}
}
return RedirectToAction(nameof(Cart));
}
[HttpGet]
公共IActionResult购物车()
{
List spray=HttpContext.Session.Get(“spray”);
如果(喷洒==null)
{
spray=新列表();
}
返回视图(喷洒);
}
[HttpPost]
公共IActionResult购物车(内部id)
{
List spray=HttpContext.Session.Get(“spray”);
对于(int i=0;i<10;i++)
{
if(喷洒[i].Id.Equals(Id))
{
喷雾[i].数量++;
}
}
返回重定向到操作(名称(购物车));
}
看法
@使用HuddsonBay.Models
@模型列表
@{
ViewData[“标题”]=“购物车”;
}
你的车
形象
名称
价格
产品类型
颜色
@foreach(模型中的var项目)
{
@项目名称
@项目.价格
@项目.数量
@item.ProductColor
当我点击“+”按钮时,我发现一个错误:
将使用控制器递增或递减。我将如何解决这个问题。
我是初学者,请帮助任何人。您在for循环中硬编码了10项。如果您的列表中的项目少于10项,它将溢出。
对此进行更改(或使用foreach)
[HttpPost]
公共IActionResult购物车(内部id)
{
List spray=HttpContext.Session.Get(“spray”);
对于(int i=0;i
另一个选择是跳过循环,改为这样做
public IActionResult Cart(int id)
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
var item = spray.SingleOrDefault(x => x.Id.Equals(id));
if(item != null)
{
item.Quantity++;
}
return RedirectToAction(nameof(Cart));
}
public IActionResult购物车(int-id)
{
List spray=HttpContext.Session.Get(“spray”);
var item=spray.SingleOrDefault(x=>x.Id.Equals(Id));
如果(项!=null)
{
项目.数量++;
}
返回重定向到操作(名称(购物车));
}
您的问题可能不是您的会话。是关于列表中的项目数。例外是关于列表的长度。您的for
始终最多为10个,并且您的列表中的项目可能较少,这就是为什么会出现超出范围的异常。e> post方法中的List spray
是会话中列表的新实例,更改属性值后,需要在会话中再次存储新列表。否则,它仍然是原始列表
基于代码的测试示例:
视图:
@型号列表
@{
ViewData[“标题”]=“购物车”;
}
你的车
名称
价格
量
颜色
@foreach(模型中的var项目)
{
@项目名称
@项目.价格
@项目.数量
@item.ProductColor
仍然不工作。当我单击“+”按钮时,值没有增加/减少。
@model int
<form method="post">
<td style="width:150px">
<div class="btn-group">
@*<a asp-action="Index" class="btn btn-danger" asp-route-id="@Model">Add</a>*@
<input type="submit" asp-action="Cart" asp-route-id="@Model" value="+" />
</div>
</td>
</form>
[HttpPost]
public IActionResult Cart(int id)
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
for (int i = 0; i < spray.Count; i++)
{
if (spray[i].Id.Equals(id))
{
spray[i].Quantity++;
}
}
return RedirectToAction(nameof(Cart));
}
public IActionResult Cart(int id)
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
var item = spray.SingleOrDefault(x => x.Id.Equals(id));
if(item != null)
{
item.Quantity++;
}
return RedirectToAction(nameof(Cart));
}
@model List<Spray>
@{
ViewData["Title"] = "Cart";
}
<h1>Your Cart</h1>
<br />
<div class="row">
<table class="table table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Price</th>
<th>Quantity</th>
<th></th>
<th>Color</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Name</td>
<td>@item.Price</td>
<td>@item.Quantity</td>
<td>
<partial name="_QuantityPartial" model="@item.Id" />
</td>
<td>@item.ProductColor</td>
<td>
<a asp-area="Customer" asp-action="Remove" asp-controller="SprayShow" asp-route-id="@item.Id" class="btn btn-danger">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
}
</tbody>
</table>
</div>
<div class="row">
<div class="col-6">
<a asp-action="Index" asp-controller="SprayShow" class="btn btn-primary">Back To Home</a>
</div>
<div class="col-6 text-right">
<h3>Total Amount</h3>
<h3>Grand Total : @Model.Sum(c => c.Price)</h3>
<a asp-area="Customer" asp-action="Checkout" asp-controller="Order" class="btn btn-info">Process To CheckOut</a>
</div>
</div>
[HttpGet]
public IActionResult Cart()
{
var value = HttpContext.Session.GetString("spray");
var spray = JsonConvert.DeserializeObject<List<Spray>>(value);
if (spray == null)
{
spray = new List<Spray>();
}
return View(spray);
}
[HttpPost]
public IActionResult Cart(int id)
{
var value = HttpContext.Session.GetString("spray");
var spray = JsonConvert.DeserializeObject<List<Spray>>(value);
for (int i = 0; i < spray.Count; i++)
{
if (spray[i].Id.Equals(id))
{
spray[i].Quantity++;
}
}
HttpContext.Session.SetString("spray", JsonConvert.SerializeObject(spray));
return RedirectToAction(nameof(Cart));
}