... текстовое описание проблемы внизу У меня есть этот контроллер:
public class StoreController : Controller
{
ShopContext db;
public StoreController(ShopContext context)
{
db = context;
}
public IActionResult Index()
{
return View();
}
public ViewComponentResult ListOfProducts(int page)
{
return ViewComponent("ListOfProducts", page);
}
часть представления индекса:
<div class="row">
<div id="ListOfProducts"></div>
</div>
ListOfPoducts ViewComponent:
public class ListOfProducts : ViewComponent
{
private readonly ShopContext db;
public ListOfProducts(ShopContext context)
{
db = context;
}
public async Task<IViewComponentResult> InvokeAsync(int page)
{
int SkipCount = (page - 1) * 9;
var products = await db.Products
.OrderByDescending(a => a.Rating)
.Skip(SkipCount)
.Take(9)
.ToListAsync();
int CountOfProducts = await db.Products.CountAsync();
ViewBag.CountOfPage = CountOfProducts / 9;
if (ViewBag.CountOfPage % 9 == 0)
ViewBag.CountOfPage++;
ViewBag.Page = page;
return View("Default", products);
}
}
с этим представлением:
@foreach (var product in Model)
{
<div class="col-md-4 col-xs-6">
@await Html.PartialAsync("_ProductCellPartial", product)
</div>
}
<partial name="_StorePagination"/>
StorePagination:
<ul class="store-pagination">
@if (ViewBag.CountOfPage <= 9)
{
for (int i = 1; i <= ViewBag.CountOfPage; i++)
{
<li><a href="#store-anchor">@i</a></li>
}
}
else
{
if (ViewBag.Page <= 4)
{
for (int i = 1; i <= 7; i++)
{
<li><a href="#store-anchor">@i</a></li>
}
<li><a>...</a></li>
<li><a href="#store-anchor">@ViewBag.CountOfPage</a></li>
}
else if (ViewBag.Page > 4 && ViewBag.Page <= ViewBag.CountOfPage - 3)
{
<li><a href="#store-anchor" >1</a></li>
<li><a>...</a></li>
for (int i = ViewBag.Page - 2; i <= ViewBag.Page + 2; i++)
{
<li><a href="#store-anchor">@i</a></li>
}
<li><a>...</a></li>
<li><a href="#store-anchor">@ViewBag.CountOfPage</a></li>
}
else if (ViewBag.Page > ViewBag.CountOfPage - 3 && ViewBag.Page <= ViewBag.CountOfPage)
{
<li><a href="#store-anchor">1</a></li>
<li><a>...</a></li>
for (int i = ViewBag.Page - 6; i <= ViewBag.CountOfPage; i++)
{
<li><a href="#store-anchor">@i</a></li>
}
}
}
</ul>
ProductCell - элемент в таблице продуктов (ViewPartial)
и этот скрипт:
$(document).ready(function () {
$(".store-pagination").children().children().click(function () {
event.preventDefault();
var id = $(this).attr("href"),
top = $(id).offset().top;
$('body,html').animate({ scrollTop: top }, 200)
$(".store-pagination").children().removeClass("active")
$(this).parent().addClass("active")
var page = $(this).text()
$("#ListOfProducts").load("/Store/ListOfProducts", "page=" + page);
})
});
О проблеме: я хочу динамически изменить часть страницы (переход по страницам не перегружал всю страницу).Проблема в том (насколько я понимаю), что невозможно вызвать ViewComponent от самого себя (надеюсь, это понятно).Согласно моему коду выше, я вызываю запрос Ajax, когда нажимаю на номер страницы списка товаров, но это не работает.И я попытался вызвать этот сценарий вне ViewComponent, и он сработал (подтверждает то, что я сказал выше).
Как я могу решить эту проблему?
... Извините за мой английский, неопытность.