【问题标题】:Error when using partial view in nopcommerce在 nopcommerce 中使用局部视图时出错
【发布时间】:2011-12-31 08:28:52
【问题描述】:

我正在使用 nopcommerce 2.2 并尝试在 _Productbox.cshtml 中使用部分视图 ProductVariant_SKU_Man_Stock 但它出现了错误: 传入字典的模型项的类型为

'System.Collections.Generic.List`1[Nop.Web.Models.Catalog.ProductModel+ProductVariantModel]', 但是这本字典需要一个类型的模型项 'Nop.Web.Models.Catalog.ProductModel+ProductVariantModel'。

下面是_Productbox.cshtml

@model Nop.Web.Models.Catalog.ProductModel
<div class="product-item">
<h2 class="product-title">
@Model.Name
</h2>
<div class="description">
      @Html.Partial("_ProductVariant_SKU_Man_Stock",Model.ProductVariantModels)
    @Html.Raw(Model.FullDescription) <br />
    @Model.Size
</div>
<div class="add-info">
    <div class="prices">
        @Html.Partial("_ProductPrice", Model.ProductPrice)
    </div>
    <div class="buttons">
       @* <input type="button" value="@T("Products.Details")" class="productlistproductdetailbutton" onclick="setLocation('@Url.RouteUrl("Product", new { productId = Model.Id, SeName = Model.SeName })')" />
*@        @if (!Model.ProductPrice.DisableBuyButton)
        {
            <br />
            <input type="button" value="@T("ShoppingCart.AddToCart")" class="productlistaddtocartbutton" onclick="setLocation('@(@Url.RouteUrl("AddProductToCart", new { productId = Model.Id }))')" />
        }
     </div>
     </div>
     </div>

还有其他方法吗,因为我需要该部分视图中的一些字段才能显示在此视图中。

productmodel.cs:

 public class ProductModel : BaseNopEntityModel
{
    public ProductModel()
    {
        ProductPrice = new ProductPriceModel();
       // ProductSku = new ProductSkuModel();
        DefaultPictureModel = new PictureModel();
        PictureModels = new List<PictureModel>();
        ProductVariantModels = new List<ProductVariantModel>();
        SpecificationAttributeModels = new List<ProductSpecificationModel>();
    }

    public string Name { get; set; }

    public string ShortDescription { get; set; }

    public string FullDescription { get; set; }

    public string ProductTemplateViewPath { get; set; }

    public string MetaKeywords { get; set; }

    public string MetaDescription { get; set; }

    public string MetaTitle { get; set; }

    public string SeName { get; set; }
    public string Size { get; set; }
    public ProductPriceModel ProductPrice { get; set; }
    public bool DefaultPictureZoomEnabled { get; set; }
    public PictureModel DefaultPictureModel { get; set; }
    public IList<PictureModel> PictureModels { get; set; }
    public IList<ProductVariantModel> ProductVariantModels { get; set; }
    public IList<ProductSpecificationModel> SpecificationAttributeModels { get; set; }
    public class ProductVariantModel : BaseNopEntityModel
    {
        public ProductVariantModel()
        {
            ProductSku = new ProductSkuModel();
            GiftCard = new GiftCardModel();
            ProductVariantPrice = new ProductVariantPriceModel();
            PictureModel = new PictureModel();
            AddToCart = new AddToCartModel();
            ProductVariantAttributes = new List<ProductVariantAttributeModel>();
        }

        public string Name { get; set; }

        public bool ShowSku { get; set; }

        public string Sku { get; set; }

        public string Description { get; set; }

        public bool ShowManufacturerPartNumber { get; set; }

        public string ManufacturerPartNumber { get; set; }

        public string DownloadSampleUrl { get; set; }

        public GiftCardModel GiftCard { get; set; }

        public string StockAvailablity { get; set; }

        public ProductVariantPriceModel ProductVariantPrice { get; set; }

        public AddToCartModel AddToCart { get; set; }

        public PictureModel PictureModel { get; set; }
        public ProductSkuModel ProductSku { get; set; }

        public IList<ProductVariantAttributeModel> ProductVariantAttributes { get; set; }
        public class ProductVariantPriceModel : BaseNopModel
        {
            public string OldPrice { get; set; }

            public string Price { get; set; }
            public string PriceWithDiscount { get; set; }

            public decimal PriceValue { get; set; }
            public decimal PriceWithDiscountValue { get; set; }

            public bool CustomerEntersPrice { get; set; }

            public bool CallForPrice { get; set; }

            public int ProductVariantId { get; set; }

            public bool HidePrices { get; set; }

            public bool DynamicPriceUpdate { get; set; }
        }
        public class ProductSkuModel : BaseNopModel
        {


            public string Sku { get; set; }

            public bool ShowSku { get; set; }
        }

想用这个局部视图:

@model Nop.Web.Models.Catalog.ProductModel.ProductVariantModel
@if (!String.IsNullOrWhiteSpace(Model.StockAvailablity))
{
    <div class="stock">

        @Model.StockAvailablity
    </div>
 }
<div class="clear">
</div>
@if (!String.IsNullOrWhiteSpace(Model.Sku) && Model.ShowSku)
{
    <div class="sku">

        @Model.Sku
    </div>
}
<div class="clear">
</div>
@if (!String.IsNullOrWhiteSpace(Model.ManufacturerPartNumber) && Model.ShowManufacturerPartNumber)
{
    <div class="manufacturerpartnumber">

        @Model.ManufacturerPartNumber
    </div>
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor nopcommerce


    【解决方案1】:

    还有一种替代方法,您可以将ProductVariant_SKU_Man_Stock 中的库存数量等属性带入_Productbox.cshtml,而无需使用部分视图。

    方法如下:

    添加以下代码集 在Productmodel.cs中,有一个嵌套类叫

    public class ProductPriceModel : BaseNopModel
    {
      //here declare stockquantity 
       public int stockqty { get; set; }
    }
    

    catalogcontroller.cs

    有个函数叫

    private ProductModel.ProductPriceModel PrepareProductPriceModel(Product product)
    { 
      //ADD THIS CODE BELOW
      model.stockqty=productvariants[0].StockQuantity;
    }
    

    _Productbox.cshtml添加

    @if (Model.ProductPrice.stockqty <= 0)
    {
       <div class="innerrtcarts"> 
        insert out of stock message or image
        </div>
    }
    

    【讨论】:

      【解决方案2】:

      _ProductVariant_SKU_Man_Stock 视图应该是单个 ProductVariantModel 并且您正在向它提供它们的列表。如果您知道您将只有一个 Variant,那么只需将该行更改为

      @Html.Partial("_ProductVariant_SKU_Man_Stock",Model.ProductVariantModels.First())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 2013-01-17
        相关资源
        最近更新 更多