gpt4 book ai didi

c# - 如何使用 Ajax 在 Asp.net Core MVC 中刷新数据而不重新加载页面?

转载 作者:行者123 更新时间:2023-12-05 09:07:02 24 4
gpt4 key购买 nike

我使用复选框进行数据过滤。我希望当我点击“提交”按钮时,只更新产品而不重新加载页面

这是过滤:

<form id="my_form" asp-action="Face" method="get">
<label>Color:</label>
<input type="checkbox" name="color" value="black" /><span>Black</span>
<input type="checkbox" name="color" value="white" /><span>White</span>
<br />
<p></p>
<label>Manufacturer:</label>
<input type="checkbox" name="brand" value="A" /><span>A</span>
<input type="checkbox" name="brand" value="B" /><span>B</span>
<input class="btn btn-info float-right" type="submit" value="Search" />
//Etc
</form>

我需要先显示这些数据。在传递过滤器的情况下,它们会根据我传递给 Controller ​​的内容进行更新

 <div class="row pr-3 pl-3">
@foreach (var c in Model)
{
<div class="filter col-md-3 p-0 hover-bc-card" data-category="@c.PurposeFor">
<div class="p-3">
<a class="text-decoration-none text-dark" asp-action="Product" asp-controller="Cosmetic" asp-route-id="@c.Id">
<div>
<img class="card-img-top p-4 bg-white" src=@c.Img alt="@c.Name">
</div>
</a>
<div class="card-body">
<h5 class="card-title text-center">@c.Name</h5>
<p class="card-text text-center f-sz-12 ">@c.PurposeFor</p>
<p class="card-text rounded text-center price-for-list">@c.Price ₴</p>
</div>
</div>
</div>
}
</div>

以防万一我的 Controller :

public IActionResult Face(string[] color, string[] brand, string[] PurposeFor, string sortOrder)
{

ViewBag.color = color;
ViewBag.PurposeFor = PurposeFor;
ViewBag.brand = brand;
ViewBag.NameSortParm = string.IsNullOrEmpty(sortOrder) ? "Name_desc" : "";
ViewBag.PriceSortParm = sortOrder == "Price" ? "Price_desc" : "Price";

var cosmetics = db.Cosmetics.Where(c => c.PurposeFor.Contains("Face")).ToList();
var co_cars = new List<Cosmetic>();
var ma_cars = new List<Cosmetic>();
var purposeFor = new List<Cosmetic>();


if (color.Length != 0)
{
foreach (string co in color)
{
var colorfiltercars = db.Cosmetics.Where(c => c.Color.Contains(co)).ToList();
co_cars.AddRange(colorfiltercars);
}
}
else
{
co_cars = cosmetics;
}

if (PurposeFor.Length != 0)
{
foreach (string pf in PurposeFor)
{
var purposefiltercars = db.Cosmetics.Where(c => c.PurposeFor.Contains(pf)).ToList();
purposeFor.AddRange(purposefiltercars);
}
}
else
{
purposeFor = cosmetics;
}

if (brand.Length != 0)
{
foreach (string ma in brand)
{
var manufacturerfiltercars = db.Cosmetics.Where(c => c.Brand.Contains(ma)).ToList();
ma_cars.AddRange(manufacturerfiltercars);
}
}
else
{
ma_cars = cosmetics;
}

var filtercars = co_cars.Intersect(ma_cars);
filtercars = filtercars.Intersect(purposeFor);

switch (sortOrder)
{
case "Name_desc":
filtercars = filtercars.OrderByDescending(s => s.Name);
break;
case "Price":
filtercars = filtercars.OrderBy(s => s.Price);
break;
case "Price_desc":
filtercars = filtercars.OrderByDescending(s => s.Price);
break;
default:
filtercars = filtercars.OrderBy(s => s.Name);
break;
}
return View(filtercars.ToList());
}

最佳答案

I want that when I click on the "Submit" button, only the products are updated without reloading the page

可以引用以下代码片段perform AJAX submission using jQuery Unobtrusive AJAX并使用返回的局部 View 结果动态更新目标容器。

<form id="my_form" asp-action="Face" method="get" data-ajax="true" data-ajax-method="get" data-ajax-update="#panel" data-ajax-mode='replace' data-ajax-url="@Url.Action("GetPartial","Home")">
<label>Color:</label>
<input type="checkbox" name="color" value="black" /><span>Black</span>
<input type="checkbox" name="color" value="white" /><span>White</span>
<br />
<p></p>
<label>Manufacturer:</label>
<input type="checkbox" name="brand" value="A" /><span>A</span>
<input type="checkbox" name="brand" value="B" /><span>B</span>
<input class="btn btn-info float-right" type="submit" value="Search" />
</form>

添加对 jquery-ajax-unobtrusive 的引用

@section scripts{
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.min.js"></script>
}

指定id属性panel给div容器

<div class="row pr-3 pl-3" id="panel">

返回局部 View 的操作方法

public IActionResult GetPartial(string[] color, string[] brand, string[] PurposeFor, string sortOrder)
{
//move your query code logic in custom method GetFilterData
var filtercars = GetFilterData(color, brand, PurposeFor, sortOrder);

return PartialView("_CarListPartial", filtercars);
}

局部 View _CarListPartial.cshtml

@model IEnumerable<WebNaApp.Models.Cosmetic>

@foreach (var c in Model)
{
<div class="filter col-md-3 p-0 hover-bc-card" data-category="@c.PurposeFor">
<div class="p-3">
<a class="text-decoration-none text-dark" asp-action="Product" asp-controller="Cosmetic" asp-route-id="@c.Id">
<div>
<img class="card-img-top p-4 bg-white" src=@c.Img alt="@c.Name">
</div>
</a>
<div class="card-body">
<h5 class="card-title text-center">@c.Name</h5>
<p class="card-text text-center f-sz-12 ">@c.PurposeFor</p>
<p class="card-text rounded text-center price-for-list">@c.Price ₴</p>
</div>
</div>
</div>
}

测试结果

enter image description here

关于c# - 如何使用 Ajax 在 Asp.net Core MVC 中刷新数据而不重新加载页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65378476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com