如何继承 ASP.NET MVC 控制器并仅更改视图?

2024-04-19

我有一个从基本控制器继承的控制器,我想知道如何利用基本控制器的所有逻辑,但返回与基本控制器使用的不同的视图。

基本控制器填充模型对象并将该模型对象传递到其视图,但我不确定如何在子控制器中访问该模型对象,以便将其传递到子控制器的视图。


有几点。如果您知道这就是要返回的全部内容,则可以将返回值键入为 ViewResult。然后您可以从重写的实现中询问该值。更重要的是,根据 MVC v1 源代码,调用 View(object) 只需在控制器上设置 ViewData.Model,然后构造一个 ViewResult。

控制器.cs:440

protected internal ViewResult View(object model) {
    return View(null /* viewName */, null /* masterName */, model);
}

控制器.cs:456

protected internal virtual ViewResult View(string viewName, string masterName, object model) {
    if (model != null) {
        ViewData.Model = model;
    }

    return new ViewResult {
        ViewName = viewName,
        MasterName = masterName,
        ViewData = ViewData,
        TempData = TempData
    };
}

因此,您需要做的就是调用基本方法并调用 View(string)。

namespace BaseControllers
{
    public class CoolController
    {
        public virtual ViewResult Get() 
        {
            var awesomeModel = new object();
            return View(awesomeModel);
        }
    }
}

public class CoolController : BaseControllers.CoolController
{
    public override ViewResult Get() 
    {
        var ignoredResult = base.Get();
        // ViewData.Model now refers to awesomeModel
        return View("NotGet");
    }
}

当然,您会浪费 CPU 周期来构造您忽略的 ViewResult。所以你可以这样做:

public class CoolController : BaseControllers.CoolController
{
    public override ViewResult Get() 
    {
        var baseResult = base.Get();
        baseResult.ViewName = "NotGet";
        return baseResult;
    }
}

如果您的基本控制器返回 ActionResult,则必须在更改 ViewName 之前将其强制转换为 ViewResult。

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

如何继承 ASP.NET MVC 控制器并仅更改视图? 的相关文章

随机推荐

  • 如何在elasticsearch中配置synonym_path

    我对 elasticsearch 很陌生 我想使用同义词 我在配置文件中添加了这些行 index analysis analyzer synonym type custom tokenizer whitespace filter synon
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • 无法从 sonarqube 服务器更新数据

    当 sonarlint eclipse 要求我刷新我的 sonarqube 数据 更新所有项目绑定 时 我收到以下错误 Unable to update data from server cerbere Unable to move C w
  • pthread_join() 用于异步线程

    我写了一个简单的演示程序 以便我可以理解pthread join 功能 我知道如何使用pthread condition wait 函数允许异步线程 但我试图了解如何使用pthread join 功能 在下面的程序中我通过线程1s ID t
  • 部分 GSON 反序列化

    我正在实施一个自定义JsonDeserializer因为处理所需的业务逻辑 但有些部分可以用标准方式解析 这是否可能 自己处理一些元素并让一些嵌套元素自动处理 这是 JSON id 10 games PZ definition count
  • 将项目 own_to 关系添加到 Active Admin

    我正在为我的 Rails 应用程序使用活动管理 我有一个客户模型 它属于一个部门 也属于一个交货时间 在我的管理文件夹中 我有一个用于主动管理的 customer rb 文件 该文件看起来像这样 ActiveAdmin register C
  • 如何将数据库从本地主机移动到实时服务器

    我使用 Xampp 构建了一个数据库和网站 它允许我使用和测试 php 以及托管在本地主机上的数据库 我现在想将其移至实时服务器 我已使用 123 reg 将网站移至实时服务器 如何移动数据库 我尝试导出 phpmyadmin 数据库并将
  • 从单独的键和值列表创建字典(dict)

    我想将这些结合起来 keys name age food values Monty 42 spam 放入单个字典中 name Monty age 42 food spam 我怎样才能做到这一点 像这样 keys a b c values 1
  • .htaccess:如何通过IP限制对单个文件的访问?

    我已经查看了所有内容 但不断遇到有关目录级 IP 限制的相同信息 通常如下所示 Order Deny Allow Deny from all Allow from 123 123 123 123 是否可以将相同类型的访问限制绑定到页面 文档
  • 高级分析对于所选进程不可用

    我正在尝试使用 3 0 中的 Android Studio 分析器分析 APK 由于我使用的不是 Android 7 0 因此我必须在模块配置中显式打开高级分析 问题是 完成此操作后 Android Studio 仍然显示 高级分析对于所选
  • 如何在管理面板中显示插件激活通知?

    当我激活测试插件时 我试图在管理面板中显示通知 我怎样才能显示它 那个方法是什么 对于插件激活 不能直接使用 admin notices 挂钩 因为存在重定向 解决方法是将您的通知存储在选项表中 并在下次检查 另外 如果您还想涵盖插件升级和
  • Django 表单验证:获取 JSON 格式的错误

    我有这个非常简单的 Django 表单 from django import forms class RegistrationForm forms Form Username forms CharField Password forms C
  • c# listview取消选择项目

    我正在开发一个 Windows 应用程序 它有一个包含一堆项目的 ListView 当用户单击某个项目时 应用程序会显示该项目的详细信息 这 然后用户就有机会编辑这些详细信息 用户应该单击 每次更改后都会单击 保存 按钮 但当然这种情况并不
  • 如何解析没有对象名称的 JSON 数组

    我将如何在 Java 中解析这个 JSON 数组 我很困惑 因为没有对象 谢谢 编辑 我是个白痴 我应该阅读文档 这可能就是它的用途 id 63565 name Buca di Beppo user null phone 408 377 7
  • Python Flask 导入未导入模块的错误

    我有一个在 Google App Engine 中运行的 Flask 应用程序 昨天 我部署了应用程序的新版本 其中仅更改了 HTML 样式 它按预期部署 今天 我意识到我没有更改每个相应 HTML 页面的标题 因此我只更改了每个 HTML
  • android服务的onCreate未调用

    我想以静态方式启动服务 所以从我的活动中我打电话 SpeechActivationService makeStartServiceIntent this getApplicationContext WordActivator 这是从服务类扩
  • 在 VIM 中切换语法高亮的隐藏属性

    我目前有一个解析日志文件的语法文件 与以下内容非常相似 这是针对 syslog 的 syn match syslogText syn match syslogFacility 1 nextgroup syslogText skipwhite
  • 如果缺少一台主机,Datastax Java 驱动程序将无法连接

    如果我没记错的话 可以连接到 Cassandra 集群 至少知道集群中的一个节点 然后可以发现其他节点 假设我有三个节点 1 2 和 3 并且我像这样连接到这些节点 Cluster builder addContactPoints 1 2
  • jquery选择器在ajax加载时找不到元素

    没有任何 jQuery 选择器能够通过 Ajax 请求处理从服务器加载的元素 但它在正常模式下工作得很好 myid change function alert OK
  • 如何继承 ASP.NET MVC 控制器并仅更改视图?

    我有一个从基本控制器继承的控制器 我想知道如何利用基本控制器的所有逻辑 但返回与基本控制器使用的不同的视图 基本控制器填充模型对象并将该模型对象传递到其视图 但我不确定如何在子控制器中访问该模型对象 以便将其传递到子控制器的视图 有几点 如