C# 无法更新asp.net core中会话数据的值
我想更新数量数据,为此,我使用了一个控制器,进行了调试,并在HTTPpost中查看了数量值的值成功更新。但当调试指针指向HTTPget方法时,它没有更新,我再次找到了旧的数量值。 对于这些输出,我的代码是:C# 无法更新asp.net core中会话数据的值,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我想更新数量数据,为此,我使用了一个控制器,进行了调试,并在HTTPpost中查看了数量值的值成功更新。但当调试指针指向HTTPget方法时,它没有更新,我再次找到了旧的数量值。 对于这些输出,我的代码是: [HttpGet] public IActionResult Cart() { List<Spray> spray = HttpContext.Session.Get<List<Spray>>
[HttpGet]
public IActionResult Cart()
{
List<Spray> spray = HttpContext.Session.Get<List<Spray>>("spray");
if (spray == null)
{
spray = new List<Spray>();
HttpContext.Session.Set("spray", spray);
}
return View(spray);
}
[HttpPost]
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));
}
[HttpGet]
公共IActionResult购物车()
{
List spray=HttpContext.Session.Get(“spray”);
如果(喷洒==null)
{
spray=新列表();
HttpContext.Session.Set(“喷洒”,喷洒);
}
返回视图(喷洒);
}
[HttpPost]
公共IActionResult购物车(内部id)
{
List spray=HttpContext.Session.Get(“spray”);
var item=spray.SingleOrDefault(x=>x.Id.Equals(Id));
如果(项!=null)
{
项目.数量++;
}
返回重定向到操作(名称(购物车));
}
在这里,我添加了大量旧的会话数据。该代码是:
[HttpGet]
public ActionResult Details(int? id)
{
if (id == null)
{
return NotFound();
}
var product = _db.Spray.Include(c => c.ProductTypes).FirstOrDefault(c => c.Id == id);
if (product == null)
{
return NotFound();
}
return View(product);
}
[HttpPost]
[ActionName("Details")]
public ActionResult ProductDetails(int id,Spray s)
{
var r = _db.Spray.Include(c => c.ProductTypes).FirstOrDefault(c => c.Id == id);
r.Quantity = s.Quantity;
//List<Spray> spray = new List<Spray>();
if (Utility.SessionExtensions.Get<List<Spray>>(HttpContext.Session, "spray") == null)
{
List<Spray> spray = new List<Spray>();
spray.Add(r);
r.Quantity = s.Quantity;
Utility.SessionExtensions.Set(HttpContext.Session, "spray", spray);
}
else
{
List<Spray> spray = Utility.SessionExtensions.Get<List<Spray>>(HttpContext.Session, "spray");
int index = isExist(id);
if (index != -1)
{
spray[index].Quantity++;
}
else
{
var m = _db.Spray.Include(c => c.ProductTypes).FirstOrDefault(c => c.Id == id);
m.Quantity = s.Quantity;
spray.Add(m);
}
Utility.SessionExtensions.Set(HttpContext.Session, "spray", spray);
}
return RedirectToAction("Index");
}
private int isExist(int id)
{
List<Spray> spray = Utility.SessionExtensions.Get<List<Spray>>(HttpContext.Session, "spray");
var r = _db.Spray.Include(c => c.ProductTypes).FirstOrDefault(c => c.Id == id);
for (int i = 0; i < spray.Count; i++)
{
if (spray[i].Id.Equals(id))
{
return i;
}
}
return -1;
}
[HttpGet]
公共行动结果详细信息(int?id)
{
if(id==null)
{
返回NotFound();
}
var product=_db.Spray.Include(c=>c.ProductTypes).FirstOrDefault(c=>c.Id==Id);
如果(产品==null)
{
返回NotFound();
}
返回视图(产品);
}
[HttpPost]
[行动名称(“详情”)]
公共行动结果产品详细信息(int id,s)
{
var r=_db.Spray.Include(c=>c.ProductTypes).FirstOrDefault(c=>c.Id==Id);
r、 数量=s.数量;
//列表喷雾=新列表();
if(Utility.SessionExtensions.Get(HttpContext.Session,“spray”)==null)
{
列表喷雾=新列表();
添加(r);
r、 数量=s.数量;
Set(HttpContext.Session,“spray”,spray);
}
其他的
{
List spray=Utility.SessionExtensions.Get(HttpContext.Session,“spray”);
int index=isExist(id);
如果(索引!=-1)
{
喷雾[指数]。数量++;
}
其他的
{
var m=_db.Spray.Include(c=>c.ProductTypes).FirstOrDefault(c=>c.Id==Id);
m、 数量=s.数量;
喷雾。添加(m);
}
Set(HttpContext.Session,“spray”,spray);
}
返回操作(“索引”);
}
私有整数isExist(整数id)
{
List spray=Utility.SessionExtensions.Get(HttpContext.Session,“spray”);
var r=_db.Spray.Include(c=>c.ProductTypes).FirstOrDefault(c=>c.Id==Id);
对于(int i=0;i
Details.cshtml
<form method="post" asp-action="" enctype="multipart/form-data">
<div class="row">
<div class="col-1">
<img src="~/@Model.Image" style="width:100%" onclick="myFunction(this);">
</br></br>
<img src="~/@Model.Image1" style="width:100%" onclick="myFunction(this);">
</div>
<div class="col-4 container">
<span onclick="this.parentElement.style.display='none'" class="closebtn">×</span>
<img id="expandedImg" style="width:100%">
<div id="imgtext"></div>
</div>
<div class="col-4">
<input type="hidden" asp-for="Id" />
<h2>@Model.Name</h2>
<p><b>@Model.Description</b></p>
<h4>@Model.Price $</h4>
<small class="text-danger">Clearence</small>
</br>
<hr>
<h4>Size:@Model.Size</h4>
<h6>Product Color:@Model.ProductColor</h6>
</br></br></br></br>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<div class="col-sm-12 col-xs-12 spinner-block">
<div class="number-spinner">
<div class="input-group number-spinner">
<b class="mr-4"> <label asp-for="@Model.Quantity"></label></b></br>
<span class="input-group-btn">
<button type="button" class="btn btn-default btn-number btncartsniper" data-type="minus" data-dir="dwn"><span class="fa fa-minus fa-sm"></span></button>
</span>
<input asp-for="@Model.Quantity" class="form-control input-number Snippper_qty" value="0" type="number">
<span class="input-group-btn">
<button type="button" class="btn btn-default btn-number btncartsniper" data-type="plus" data-dir="up"><span class="fa fa-plus fa-sm"></span></button>
</span>
</div>
</div>
</div>
<input type="submit" value="Add To Cart" class="btn btn-dark form-control" />
@if (Model.Quantity > 0)
{
<h3>This Product Is InStock</h3>
}
else
{
<h1>Not InStock</h1>
}
</div>
</div>
<div>
<a asp-action="Index" class="btn btn-dark">Back To List</a>
</div>
</form>
&时代;
@如果(型号数量>0)
{
这个产品是InStock
}
其他的
{
不是因斯托克
}
当我单击“+”按钮时,它会响应cart“httpPost”此处的数量值增加,但当调试指针转到cart“HTTPget”时,我找到了数量的旧值。同样,我找不到输出的更新数量值。我想增加我的数量价值
我是初学者。请帮助任何人。ASP.NET Core中的会话数据是序列化的,而不是作为实际对象。这意味着当您获取一个对象并对其进行修改时,不会存储任何内容,因为会话存储中并没有和序列化数据的链接。修改列表中的任何内容后,必须将修改后的列表存储回会话中
参见[HttpPost]
公共IActionResult购物车(内部id)
{
List spray=HttpContext.Session.Get(“spray”);
var item=spray.SingleOrDefault(x=>x.Id.Equals(Id));
如果(项!=null)
{
项目.数量++;
HttpContext.Session.Set(“spray”,spray);//必须为一组新的会话数据添加它
}
返回重定向到操作(名称(购物车));
}
@using HuddsonBay.Models
@model List<Spray>
@{
ViewData["Title"] = "Cart";
}
<h1>Your Cart</h1>
<br />
<div class="row">
<table class="table table-bordered">
<thead>
<tr>
<th>Image</th>
<th>Name</th>
<th>Price</th>
<th>Quantity</th>
<th>Color</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<img src="~/@item.Image" width="200px" height="150px" />
</td>
<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>
[HttpPost]
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++;
HttpContext.Session.Set("spray", spray); //it's must add for a set new session data
}
return RedirectToAction(nameof(Cart));
}