如何在MVC中调用另一个控制器函数?

时间:2012-10-12 01:28:38

标签: c# asp.net-mvc

我有两个控制器。

一个是

 public partial class CatalogController : BaseNopController
    {

 [NonAction]
        protected IEnumerable<ProductOverviewModel> PrepareProductOverviewModels(IEnumerable<Product> products, 
            bool preparePriceModel = true, bool preparePictureModel = true,
            int? productThumbPictureSize = null, bool prepareSpecificationAttributes = false,
            bool forceRedirectionAfterAddingToCart = false)
        {
 var models = new List<ProductOverviewModel>();
            foreach (var product in products)
            {
                var model = new ProductOverviewModel()
                {
                    Id = product.Id,
                    Name = product.GetLocalized(x => x.Name),
                    ShortDescription = product.GetLocalized(x => x.ShortDescription),
                    FullDescription = product.GetLocalized(x => x.FullDescription),
                    SeName = product.GetSeName(),
                };

}
}

另一个是

public class HireController : BaseNopController
    {

        [HttpPost]
        public ActionResult CheckData(string submitButton)
        {
            switch (submitButton)
            {
                case "Yes":

                   // I want to call  CatalogController  --> PrepareProductOverviewModels
                case "No":
                    return RedirectToRoute("detailform");
                default:
                    return RedirectToRoute("detailform");
            }

        }
}

内部租用控制器 - &gt; CheckData函数,我想调用CatalogController - &gt; PrepareProductOverviewModels(...) 我该怎么办?

2 个答案:

答案 0 :(得分:3)

这是protected,因此,除非HireController来自CatalogController,否则您无法调用它。但是,如果您将其放在另一个类(例如ViewModel类)中并将其设为public,则可以从HireController调用它。

对于ViewModel来说,protected或者它在控制器类中是没有意义的。

答案 1 :(得分:0)

如果您需要在控制器之间共享方法,则应将这些方法分离为“帮助程序”类,并让两个控制器都调用该类。