首页 > 解决方案 > MarkAsNewProduct 过滤器在 nopcommerce 4.2 中不起作用

问题描述

我在nopcommerce4.2的产品类别页面中添加了用于过滤“MarkAsNewProduct”的复选框。

先看图,

在此处输入图像描述

在这张图片中,我在上面过滤了三件事。即过滤供应商=>类别=> markasnewproduct

现在,当我选中markasnewproduct过滤器的复选框时,供应商类别过滤器正在完美地发生,当时过滤器无法按照新产品工作。

这是我的控制器代码,

[HttpsRequirement(SslRequirement.No)]
public virtual IActionResult Vendor(int vendorId, CatalogPagingFilteringModel command, int categoryId, bool markAsNewProduct)        
{
    //int abc = Convert.ToInt32(ViewBag.CategoryId);
    var vendor = _vendorService.GetVendorById(vendorId);
    if (vendor == null || vendor.Deleted || !vendor.Active)
        return InvokeHttp404();

    //'Continue shopping' URL
    _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer,
        NopCustomerDefaults.LastContinueShoppingPageAttribute,
        _webHelper.GetThisPageUrl(false),
        _storeContext.CurrentStore.Id);

    //display "edit" (manage) link
    if (_permissionService.Authorize(StandardPermissionProvider.AccessAdminPanel) && _permissionService.Authorize(StandardPermissionProvider.ManageVendors))
        DisplayEditLink(Url.Action("Edit", "Vendor", new { id = vendor.Id, area = AreaNames.Admin }));

    //model
    var model = _catalogModelFactory.PrepareVendorModel(vendor, command, categoryId, markAsNewProduct); 
    return View(model);
}

这里的景色,

@model VendorModel
@using Nop.Core.Domain.Seo
@inject Nop.Core.IWebHelper webHelper
@inject SeoSettings seoSettings
@{
    Layout = "_ColumnsTwo";

    //title
    Html.AddTitleParts(!string.IsNullOrEmpty(Model.MetaTitle) ? Model.MetaTitle : Model.Name);
    //meta
    Html.AddMetaDescriptionParts(Model.MetaDescription);
    Html.AddMetaKeywordParts(Model.MetaKeywords);
    //page class
    Html.AppendPageCssClassParts("html-vendor-page");

    if (seoSettings.CanonicalUrlsEnabled)
    {
        var vendorUrl = Url.RouteUrl("Vendor", new { SeName = Model.SeName }, webHelper.CurrentRequestProtocol).ToLowerInvariant();
        Html.AddCanonicalUrlParts(vendorUrl, seoSettings.QueryStringInCanonicalUrlsEnabled);
    }
}
<form asp-route="Vendor" method="post">
    <input type="hidden" value="@Model.CategoryId" id="CategoryId" name="categoryId" />

    <input type="submit" value="SUBMIT" id="submit" style="display: none;" />

    <div class="page vendor-page">
        <div class="page-title">
            <h1>@Model.Name</h1>
        </div>
        <div class="page-body">
            @await Component.InvokeAsync("Widget", new { widgetZone = PublicWidgetZones.VendorDetailsTop, additionalData = Model })
            <div class="contact-vendor">

                <input type="button" value="@T("ContactVendor")" class="button-2 contact-vendor-button"
                       onclick="setLocation('@Url.RouteUrl("Vendordetail", new { vendorId = Model.Id })')" />
                <input asp-for="markAsNewProduct" onclick="MarkAsNewProductCheck()" /> MarkAsNewProduct

            </div>

            @if (Model.Products.Count > 0)
            {
                @await Html.PartialAsync("_CatalogSelectors", Model.PagingFilteringContext)
            }
            @*product list*@
            @if (Model.Products.Count > 0)
            {
                <div class="@(Model.PagingFilteringContext.ViewMode == "list" ? "product-list" : "product-grid")">
                    <div class="item-grid">
                        @foreach (var product in Model.Products)
                        {
                            <div class="item-box">
                                @await Html.PartialAsync("_ProductBox", product)
                            </div>
                        }
                    </div>
                </div>
            }
            @{
                var pager = Html.Pager(Model.PagingFilteringContext).QueryParam("pagenumber");
            }
            @if (!pager.IsEmpty())
            {
                <div class="pager">
                    @pager
                </div>
            }
            @await Component.InvokeAsync("Widget", new { widgetZone = PublicWidgetZones.VendorDetailsBottom, additionalData = Model })
        </div>
    </div>
</form>
<script asp-location="Footer">
    function MarkAsNewProductCheck() {
        $('#submit').trigger('click');
    }
</script>

现在,在这个代码控制器代码中,即

public virtual IActionResult Vendor(int vendorId, CatalogPagingFilteringModel command, int categoryId, bool markAsNewProduct)

参数中markasnewproduct的值就来了。例如:如果我取消选中复选框,那么它会显示错误值,而当我选中复选框时,它会显示真实值。

标签: asp.net-mvcnopcommerce-4.2

解决方案


推荐阅读