控制器上下文为空

2023-12-02

我有这个 MVC4 控制器(ControllerB):

public class MyControllerB : Controller
{
    public bool Check(string actionName, ControllerBase controllerBase)
    {
        ControllerContext controllerContext = new ControllerContext(this.ControllerContext.RequestContext, controllerBase);

        ...
    }
}

我从“ControllerA”调用 ControllerB 的 Check 方法,如下所示:

bool b = new MyControllerB().Check("Index", this);

I get Object reference not set to an instance of an object因为this.ControllerContext一片空白。

如果我将 Check 方法移至 ControllerA,它就可以正常工作。但我需要这个方法位于不同的控制器中。如何修复我的代码以使“this.ControllerContext”不为空?


The ControllerContext为空,因为您正在手动创建ControllerB实例来自ControllerA.

通常情况下,IController实例由注册者创建IControllerFactory, 通常System.Web.Mvc.DefaultControllerFactory。控制器工厂将new()实例并正确初始化设置。

正如 @DZL 所说,通常最好让两个控制器都子类为 aBaseController类,可以具有共享初始化以及共享属性和方法。

我不明白你想要做什么的业务逻辑,但这里有一个使用两个控制器的基类的代码示例:

namespace MyNamespace.Controllers
{
    public class MyControllerBase : Controller
    {
        public bool Check(string actionName, ControllerBase controllerBase)
        {
            ControllerContext controllerContext = new ControllerContext(this.ControllerContext.RequestContext, controllerBase);
            return false;
        }
    }
    public class MyControllerA : MyControllerBase
    {
        ActionResult Index()
        {
            bool b = base.Check("Index", this);
            return View();
        }
    }
    public class MyControllerB : MyControllerBase
    {
        ActionResult Index()
        {
            bool b = base.Check("Index", this);
            return View();
        }
    }
}

如果你真的想完全按照你的要求去做,你必须打电话IControllerFactory.CreateController(requestContext, controllerName)代替new ControllerB(),但这是一种非常复杂的做事方式 - 我不会推荐它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

控制器上下文为空 的相关文章

随机推荐

  • 使用 pandoc 将 markdown 转换为 pdf 时如何强制将图像转换为文本

    我制造了一个GitHub 维基百科 软件包手册 我想将其转换为精美的 pdf 手册 然而 我在处理图表时遇到了一些麻烦 其中许多图表都放在接下来的一页中 远远落后于文本中应有的位置 这使得文档非常难以阅读 为此 我基本上遵循了建议here
  • 检查输入是否为整数

    为了学习 C 我正在翻译我用 Python 编写的程序 我写了这个 n 0 while n lt 2 try n int raw input Please insert an integer bigger than 1 except Val
  • Java:计算三角形的面积

    import java lang Math import java awt public class Triangle implements Shape java awt Point a java awt Point b java awt
  • 如何在邮件服务器上的 HTML 电子邮件中嵌入图像?

    如何在 HTML 中嵌入图像 以便图像与 html 文件内容一起传递 而不需要单独访问服务器来检索图像 我们需要它在签名离开邮件服务器之前将公司徽标嵌入到签名中 我们不想使用雷鸟或 Outlook 等客户端解决方案来添加签名 thanks
  • Google 身份服务 - 保持登录状态

    我正在从 Google 登录平台库迁移到新的 Google 身份服务使用一键登录 但当用户刷新或转到其他页面时 网站会自动注销用户 这是加载一键登录的每个页面上都存在的代码 div div 删除它只会让用户退出 无法重新登录 有一个cook
  • Google App Engine - 如何扩展 db.IntegerProperty

    当我在整数和字符串之间交换很多时 我希望扩展 db IntegerProperty 以下是一些代码片段和我在应用程序启动器日志中收到的错误消息 有什么指点吗 谢谢 大卫 class FSIdProperty db IntegerProper
  • 仅 CSS 动画绘制具有边框半径和透明背景的圆

    我正在尝试绘制一个具有边框半径的圆 并为其设置动画 我可以做到这一点 但我不能做的是覆盖元素并将圆圈背景设置为透明 而不取消隐藏蒙版 我无法使其在元素上透明 因为需要应用遮罩来隐藏圆圈的左半部分 因为它旋转以模仿绘制效果 HTML div
  • Android Studio 构建失败,并显示“在根项目 'MyProject' 中未找到任务 ''”。

    在更换笔记本电脑并更新到 Android Studio 版本 0 8 2 后尝试构建项目时 我收到此错误 失败 构建失败并出现异常 什么地方出了错 在根项目 MyProject 中找不到任务 尝试 运行 gradle 任务以获取可用任务的列
  • 远程网络驱动程序上的 Chrome(通过网格)无法启动

    我在使用 Grid 上的远程 Webdriver 功能 1 个 Linux 集线器和 1 个带有 Firefox 和 Chrome 的 Linux 节点 启动 Chrome 的 Cucumber 测试时遇到问题 Firefox 测试进行得很
  • 使用 EaselJS 在 html5 画布中绘制一条线

    我对 Easel 和 HTML5 本身非常陌生 我正在尝试使用 EaselJS 在画布上画一条线 X 坐标固定为 100 Y 坐标从数组列表中获取 我编写的代码如下 有人可以让我知道我哪里出错了吗 function myFunction a
  • Android Wear-如何捕获触摸事件

    我想捕获Android Wear上的触摸事件 我使用的是Samsung Gear Live 来绘制触摸轨迹 我尝试捕获 onTouch 事件和 onGenericMotionEvent 事件 如以下代码所示 但是当我在屏幕上滑动时 该事件仅
  • 向 .NET 应用程序添加脚本功能

    我有一个用 C 编写的小游戏 它使用数据库作为后端 它是 A集换式卡牌游戏 我想以脚本的形式实现卡片的功能 我的意思是我本质上有一个界面 ICard 卡片类实现了 public class Card056 ICard 并且其中包含一个由游戏
  • ExecutorService 的线程安全静态初始化

    我正在尝试基于 Initialization on demandholder idiom 创建一个线程安全的单例类 这是我的代码 public class Check private Check private static class P
  • 如何获取查询字符串并在 htaccess 中重写它

    我有这样的疑问 example com folder q keyword 请建议如何将包含 关键字 作为参数的所有查询重定向到服务器上的其他文件 folder core index php id 1 I mean 1必须是keyword 这
  • Mac 操作系统不支持 Java 页面翻转?

    我希望有人之前偶然发现过以下问题 我的 Java 应用程序在 Mac 上存在图形性能问题 因此我制作了一个简单的测试应用程序 代码如下 当我在 Windows 上运行它时 控制台告诉我 图形配置翻转 真的BufferStrategy翻转 真
  • 模型保存骨干

    我正在在线数据库 Parse com 上保存模型 save 函数工作正常 但 save 内部的回调函数没有被调用 this utente save success function persona never called console
  • Angular 6 代理不再工作

    我有一个 Angular 应用程序和一个 Web API 为了在本地进行测试 我使用代理配置文件 proxy conf json api target host localhost protocol http port 50565 secu
  • 以编程方式将销售价格添加到产品变体中

    我需要以编程方式更新可变产品及其所有变体的销售价格 我需要添加什么样的元字段 我正在尝试更新主要产品 例如 update post meta post id regular price 100 update post meta post i
  • 重写java中的“私有”方法

    这个想法有些含糊不清 我需要一些澄清 我的问题是使用这段代码时 public class B private void don System out println hoho private public static void main
  • 控制器上下文为空

    我有这个 MVC4 控制器 ControllerB public class MyControllerB Controller public bool Check string actionName ControllerBase contr