首页 > 解决方案 > 无法转换类型异常的对象

问题描述

这个问题刚刚出现,但是我并没有修改与此相关的代码。所以不太确定如何修复它。

这是短消息:

无法将类型为“<>f__AnonymousType16 1[Nop.Web.Models.Media.PictureModel]]”的对象2[Nop.Web.Models.Media.PictureModel,System.Collections.Generic.List转换为类型“<>f__AnonymousType4 2[Nop.Web.Models.Media.PictureModel,System.Collections.Generic.List1[Nop.Web.Models.Media.PictureModel]]”。

这是完整的例外:

System.InvalidCastException:无法将类型为“<>f__AnonymousType16 1[Nop.Web.Models.Media.PictureModel]]”的对象2[Nop.Web.Models.Media.PictureModel,System.Collections.Generic.List转换为类型“<>f__AnonymousType4 2[Nop.Web.Models.Media.PictureModel,System.Collections.Generic.List1[Nop.Web.Models.Media.PictureModel]]”。在 Nop.Core.Caching.MemoryCacheManager.Get[T](String key) 在 Nop.Core.Caching.CacheExtensions.Get[T](ICacheManager cacheManager, String key, Int32 cacheTime, Func 1 acquire) at Nop.Core.Caching.CacheExtensions.Get[T](ICacheManager cacheManager, String key, Func1 acquire) 在 Nop.Web.Controllers .ProductController.PrepareProductDetailsPageModel(Product product, ShoppingCartItem updatecartitem, Boolean isAssociatedProduct, Nullable 1 childProductId) at Nop.Web.Controllers.ProductController.ProductDetails(Int32 productId, String c, String s, Int32 updatecartitemid) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker。 AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async。AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f( ) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker 的 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)。<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker。 <>c__DisplayClass21.b__1e(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.b__1d(IAsyncResult asyncResult,System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 的 ExecuteCoreState innerState)1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult, ProcessRequestState innerState) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid `1.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStepImpl (IExecutionStep 步骤)在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously)

这是异常指向的代码:

model.DefaultPictureZoomEnabled = _mediaSettings.DefaultPictureZoomEnabled;
        //default picture
        var defaultPictureSize = isAssociatedProduct
            ? _mediaSettings.AssociatedProductPictureSize
            : _mediaSettings.ProductDetailsPictureSize;
        //prepare picture models
        var productPicturesCacheKey = string.Format(ModelCacheEventConsumer.PRODUCT_DETAILS_PICTURES_MODEL_KEY,
            product.Id, defaultPictureSize, isAssociatedProduct, _workContext.WorkingLanguage.Id,
            _webHelper.IsCurrentConnectionSecured(), _storeContext.CurrentStore.Id);
        var cachedPictures = _cacheManager.Get(productPicturesCacheKey, () =>
        {
            var pictures = _pictureService.GetPicturesByProductId(product.Id);
            var defaultPicture = pictures.FirstOrDefault();
            var defaultPictureModel = new PictureModel
            {
                ImageUrl = _pictureService.GetPictureUrl(defaultPicture, defaultPictureSize, !isAssociatedProduct),
                FullSizeImageUrl = _pictureService.GetPictureUrl(defaultPicture, 0, !isAssociatedProduct),
                Title =
                    string.Format(_localizationService.GetResource("Media.Product.ImageLinkTitleFormat.Details"),
                        model.Name),
                AlternateText =
                    string.Format(
                        _localizationService.GetResource("Media.Product.ImageAlternateTextFormat.Details"),
                        model.Name),
            };
            //"title" attribute
            defaultPictureModel.Title = (defaultPicture != null &&
                                         !string.IsNullOrEmpty(defaultPicture.TitleAttribute))
                ? defaultPicture.TitleAttribute
                : string.Format(_localizationService.GetResource("Media.Product.ImageLinkTitleFormat.Details"),
                    model.Name);
            //"alt" attribute
            defaultPictureModel.AlternateText = (defaultPicture != null &&
                                                 !string.IsNullOrEmpty(defaultPicture.AltAttribute))
                ? defaultPicture.AltAttribute
                : string.Format(_localizationService.GetResource("Media.Product.ImageAlternateTextFormat.Details"),
                    model.Name);

            //all pictures
            var pictureModels = new List<PictureModel>();
            foreach (var picture in pictures)
            {
                var pictureModel = new PictureModel
                {
                    ImageUrl =
                        _pictureService.GetPictureUrl(picture,
                            _mediaSettings.ProductThumbPictureSizeOnProductDetailsPage),
                    FullSizeImageUrl = _pictureService.GetPictureUrl(picture),
                    Title =
                        string.Format(
                            _localizationService.GetResource("Media.Product.ImageLinkTitleFormat.Details"),
                            model.Name),
                    AlternateText =
                        string.Format(
                            _localizationService.GetResource("Media.Product.ImageAlternateTextFormat.Details"),
                            model.Name),
                };
                //"title" attribute
                pictureModel.Title = !string.IsNullOrEmpty(picture.TitleAttribute)
                    ? picture.TitleAttribute
                    : string.Format(_localizationService.GetResource("Media.Product.ImageLinkTitleFormat.Details"),
                        model.Name);
                //"alt" attribute
                pictureModel.AlternateText = !string.IsNullOrEmpty(picture.AltAttribute)
                    ? picture.AltAttribute
                    : string.Format(
                        _localizationService.GetResource("Media.Product.ImageAlternateTextFormat.Details"),
                        model.Name);

                pictureModels.Add(pictureModel);
            }

            return new {DefaultPictureModel = defaultPictureModel, PictureModels = pictureModels};
        });
        model.DefaultPictureModel = cachedPictures.DefaultPictureModel;
        model.PictureModels = cachedPictures.PictureModels;

我试图将图片发送到这样的列表,但它没有用。

var pictures = _pictureService.GetPicturesByProductId(product.Id).ToList();

任何人都知道这里可能发生了什么,我以前从未遇到过这类错误。谢谢

标签: c#asp.netasp.net-mvcnopcommerce

解决方案


推荐阅读