NopCommerce,在Nop.Plugins项目中调用Nop.Web控制器方法

时间:2016-03-02 11:20:25

标签: c# asp.net .net asp.net-mvc nopcommerce

努力实现
我正在写一个宁静的插件,允许从外部相关系统(网站)搜索产品。并允许他们在自己的网站上展示我们的产品。

我不想从头开始编写所有内容,而是想使用已经在NopCommerce中编写的内容。我已经设法搜索产品,但是我无法通过使用已存在的东西获得产品图像。

CatalogController内,我看到SearchTermAutoComplete ActionResult,它正是我想要的。但我无法从我的插件代码中调用它。我不想将控制器文件/代码复制到插件项目中。因为,那么我将不得不复制所有扩展对象和其他依赖项。

在MVC / NopCommerce中有没有办法访问控制器代码并从插件中调用它们?

插件代码:

public ActionResult Search(String authToken, string keywords)
        {
            if (!IsAuthTokenValid(authToken, out _tokenStatus))
                return InvalidAuthToken(_tokenStatus);

            var _products = _productService.SearchProducts(0, int.MaxValue, null, 0, 0, 0, 0, null, false, false, false, null, null, 0, keywords, true, true, true);

            if (_products == null || _products.Count <= 0)
                return ErrorOccured("No product was found");
            else
                return Successful(_productHelper.GetProductsJson(_products, _productPictures));
        }

P.S。新手MVC / NopCommerce

更新: 我试图加载控制器,然后调用该方法,请参阅下面的代码。但是,我最终在BaseController's RenderPartialViewToString方法中收到错误。

代码:

var _shoppingCartController = DependencyResolver.Current.GetService<ShoppingCartController>();
            return _shoppingCartController.AddProductToCart_Catalog(productId, 1, quantity);

执行时出错:     类型&#39; System.ArgumentNullException&#39;的例外情况发生在System.Web.Mvc.dll中但未在用户代码中处理

Additional information: Value cannot be null.

堆栈追踪:

   at System.Web.Mvc.ViewEngineCollection.FindPartialView(ControllerContext controllerContext, String partialViewName)
   at Nop.Web.Framework.Controllers.BaseController.RenderPartialViewToString(String viewName, Object model) in d:\NopCommerce\Presentation\Nop.Web.Framework\Controllers\BaseController.cs:line 67
   at Nop.Web.Controllers.ShoppingCartController.AddProductToCart_Catalog(Int32 productId, Int32 shoppingCartTypeId, Int32 quantity, Boolean forceredirection) in d:\NopCommerce\Presentation\Nop.Web\Controllers\ShoppingCartController.cs:line 1547
   at Nop.Plugin.RestService.Controllers.ApiController.AddProductToCart(String authToken, Int32 productId, Int32 quantity)
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()

0 个答案:

没有答案