【问题标题】:ASP.NET Core MVC apply isotope filter on product page detailsASP.NET Core MVC 在产品页面详细信息上应用同位素过滤器
【发布时间】:2021-08-06 03:39:48
【问题描述】:

我在我的 .Net 核心项目上动态应用了同位素过滤器。我成功地做到了,但发生了一个小错误。选择产品的特定类别位置后不排在第一位。下面看我的两张图片

All Product

After Filter check the position of that image not changed(its need to come first)

下面是我的代码 索引.cshtml

@model BornoMala.Models.ViewModels.ProductDetailsVM
<section id="portfolio" class="portfolio">
    <div class="container">
        <div class="row" data-aos="fade-up">
            <div class="col-lg-12 d-flex justify-content-center">
                <ul id="portfolio-flters">
                    <li data-filter="all" class="filter-active filter-button">All</li>
                    @foreach (var obj in Model.Categories)
                    {
                        <li class="filter-button" data-filter="@obj.Name.Replace(' ','_')">@obj.Name</li>
                    }
                </ul>
            </div>
        </div>

        <div class="row portfolio-container" data-aos="fade-up">
            @foreach (var prod in Model.Products)
            {
                <div class="col-lg-4 col-md-6 portfolio-item  filter @Model.Category.Name.Replace(' 
                 ','_')">
                   <div class="portfolio-img"><img src="@Model.ImageUrl" class="img-fluid" alt=""></div>
                    <div class="portfolio-info">
                    <h4>@Model.Title</h4>
                    <p>By <b>@Model.Title</b></p>
                    </div>
                  </div>
            }
        </div>

    </div>
</section>

同位素.js

$(window).on('load', function () {
        var portfolioIsotope = $('.portfolio-container').isotope({
            itemSelector: '.portfolio-item',
        });
});

 $(document).ready(function () {

            $(".filter-button").click(function () {
                $("#portfolio-flters li").removeClass('filter-active');
                $(this).addClass('filter-active');

                var value = $(this).attr('data-filter');
                if (value == "all") {
                    $('.portfolio-item').show('3000');
                }
                else {
                    $(".portfolio-item").not('.' + value).hide('2000');
                    $('.portfolio-item').filter('.' + value).show('2000');

                }
            });

    });

如果我从 isotope.js 中删除 ..portfolio-container 类 在加载窗口上 然后详细信息页面容器不灵活检查我的另一个图像(但过滤器工作正常)..

Image card not flexible

【问题讨论】:

  • 有人知道答案吗?

标签: javascript asp.net asp.net-core asp.net-mvc-4 jquery-isotope


【解决方案1】:

有两种方式:

1、仅将window onload部分改为:

$('.portfolio-container').isotope({
        itemSelector: '.element-item'
    });

然后它会显示给第一个,但是需要一些时间才能移动在我的演示中

2、尝试另一种使用同位素的方式:

注意 'portfolio-filters' 中的 data-filter 内容,它可能与您的不同。这条路

原则是当您点击不同的过滤器按钮时每次调用同位素

(不同的数据过滤器)。

修改后的代码:

Mind data-filter=".@obj.Name.Replace(' ','_')"&gt;@obj.Name&lt;/li&gt; 数据存储在数据库中

是数字,但您可以添加“.”在'@'之前,所以它可以被同位素识别。

<div class="container">
<div class="row" data-aos="fade-up">
    <div class="col-lg-12 d-flex justify-content-center">
        <ul id="portfolio-flters">
            <li data-filter="*" class="filter-active filter-button">All</li>
            @foreach (var obj in Model.Categories)
            {
                <li class="filter-button" data-filter=".@obj.Name.Replace(' ','_')">@obj.Name</li>
            }
        </ul>
    </div>
</div>
<div class="row portfolio-container" data-aos="fade-up">
    @foreach (var product in Model.Products)
    {
        <partial name="_IndividualProductCard" model="product" />
    }
</div>
@section Scripts
{
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
<script>
    $mygrid = $('.portfolio-container').isotope({
        itemSelector: '.portfolio-item'
    });

    $('#portfolio-flters').on('click', 'li', function () {
        var filterValue = $(this).attr('data-filter');
        $mygrid.isotope({ filter: filterValue });
    });
</script>
}

数据库中的数据:

结果:

【讨论】:

  • 在第二种方法中你使用静态项目...当我第一次尝试时我使用相同的 JS 方法它的工作但动态(从数据库获取所有产品和类别)它不起作用..
  • 您将 data-filter=".Digital" 放在 Category 上并将该过滤器应用于图像类`
    ` 但在动态中它是如何可能的
  • @SoumikMahajan 只需要添加 '.'在'@obj.Name.Repl...'之前
  • 检查下面的“添加答案”区域我按照你的代码然后这发生了@tisa
  • @SoumikMahajan 我提供了整个代码,包括数据库中的数据,你可以试试。关于你的脚本,我不明白“show 0010”是什么意思。要调用 $mygrid,您应该获取数据过滤器值,然后获取 $mygrid.isotope({ filter: $(this).attr('data-filter') });
【解决方案2】:

@蒂萨 正如你所说,我像这样遵循你的代码 索引.cshtml

<section  class="portfolio">
    <div class="container">
        <div class="row" data-aos="fade-up">
            <div class="col-lg-12 d-flex justify-content-center">
                <ul id="portfolio-flters">
                    <li data-filter="*" class="filter-active filter-button">All</li>
                    @foreach (var obj in Model.Categories)
                    {
                        <li class="filter-button" data-filter="@obj.Name.Replace(' 
                        ','_')">@obj.Name</li>

                    }

                </ul>
            </div>
        </div>
        <div class="row portfolio-container" data-aos="fade-up">
            @foreach (var product in Model.Products)
            {
                <partial name="_IndividualProductCard" model="product" />
            }

        </div>

    </div>
</section>

_IndividualProductCard.cshtml

@model BornoMala.Models.Product
<div class="col-lg-4 col-md-6 portfolio-item  filter @Model.Category.Name.Replace(' ','_')">
    <div class="portfolio-img ">
        <img src="@Model.ImageUrl" width="100" height="50" />
    </div>
</div>
 @section Scripts
    {
        <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>
        <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
        <script>
            $mygrid = $('.portfolio-container').isotope({
                itemSelector: '.portfolio-item'
            });

            $('#portfolio-flters').on('click', 'li', function () {
                var filterValue = $(this).attr('data-filter');
                $mygrid.isotope({ filter: filterValue });
            });
        </script>
    }

产品型号

namespace project.Models
{
    public class Product
    {
        [Key]
        public int Id { get; set; }

        [Required]
        public string Title { get; set; }

        [Required]
        public string Description { get; set; }

        [Required]
        public string Artist { get; set; }

        [Required]
        [Range(1,1000)]
        public double Price { get; set; }

        public string ImageUrl { get; set; }

        [Required]
        public int CategoryId { get; set; }

        [ForeignKey("CategoryId")]
        public Category Category { get; set; }

        [Required]
        public int StyleId { get; set; }

        [ForeignKey("StyleId")]
        public Style Style { get; set; }
    }
}

productdetailsVM

namespace project.Models.ViewModels
{
    public class ProductDetailsVM
    {
        public IEnumerable<Product> Products { get; set; }
        public IEnumerable<Category> Categories { get; set; }
        
    }
}

但所有类别图片显示其他人没有图片显示 blank image

我已经用 jquery 修复了过滤,但问题是图片位置没有改变,因为“$mygrid”没有调用所以如何调用它

@section Scripts{

    <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script>
    <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
   <script>
            $mygrid = $('.portfolio-container').isotope({
                itemSelector: '.portfolio-item'
            });

            $(".filter-button").click(function(){

                var value = $(this).attr('data-filter');
                if(value == "all")
                 {
                   $('.filter').show('0010');
                 }
            else
                  {
                    $(".filter").not('.'+value).hide('0010');
                    $('.filter').filter('.'+value).show('0010');

               }
            });
   </script>
        

【讨论】:

  • @Tisa 现在检查
猜你喜欢
相关资源
最近更新 更多
热门标签