如何从MVC Core 2中的视图上下文访问Extension方法

时间:2018-05-24 10:01:35

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

我希望在视图上访问 ViewContext ,因为我已经创建了扩展方法并使用该扩展我想在View上访问Base Controller。

请参阅以下代码

public static class ViewContextExtension
{       
    public static BaseController BaseController(this ControllerContext view)
    {
        BaseController objBaseController = null;
        if (view != null)
            objBaseController = view.Controller as BaseController;
        return objBaseController;
    }
}

我想在MVC Core 2中使用相同的代码,但我无法在视图端访问它。

以前我在MVC 5.2.3中使用它。例如

!ViewContext.BaseController().IsMobileDevice

1 个答案:

答案 0 :(得分:1)

我找到了上述问题的解决方案。请参阅下文。

使用名称库。

using Microsoft.AspNetCore.Mvc;

查找以下代码

public static class ControllerContextExtension
    {
        /// <summary>
        /// BaseController
        /// </summary>
        /// <param name="view"></param>
        /// <returns></returns>

        public static BaseController BaseController(this ControllerContext view)
        {
            var factory = CreateControllerFactory();
            return factory.CreateController(view) as BaseController;
        }
        private static DefaultControllerFactory CreateControllerFactory()
        {
            var propertyActivators = new IControllerPropertyActivator[]
            {
                  new DefaultControllerPropertyActivator(),
            };

            return new DefaultControllerFactory(
                new DefaultControllerActivator(new TypeActivatorCache()),
                propertyActivators);
        }
    }

在视图中访问以上代码.cshtml。

controllerContext.BaseController().IsMobileDevice

建议我们是否可以改进上述代码。快乐的编码。