MVC 模型在 OnExecuted 操作过滤器中为 null ...或者设置模型的更优雅的方式?

2024-04-30

我有一个 ActionFilter ,它覆盖了 OnActionExecuted 方法。在 POST 操作中,filterContext.Controller.ViewData.Model 始终为 null。我确实发现下面的文章似乎在说它不应该为 null,但这一定是 MVC 的早期版本。这就是MVC3。我应该得到什么?

ActionFilter 内的模型可用性 https://stackoverflow.com/questions/2444956/model-availability-inside-actionfilter

UPDATE:

我已经找到了最初问题的答案。我有一个自定义 ActionResult,它使用自定义日期格式化程序输出 JSON。问题是模型没有在控制器中设置。

在我的自定义 ActionResult 中,ExecuteResult 方法传递了 ControllerContext,如果我可以在那里设置模型,那就太好了:

context.Controller.ViewData.Model = _data;

但这已经太晚了,ActionFilter 中的结果仍然为 null。这似乎意味着我需要在控制器中手动设置模型:

ControllerContext.Controller.ViewData.Model = model; 

Or

View(model);

这意味着我需要记住每次使用此自定义 ActionResult 时都执行此操作。有更优雅的方式吗?

另一个更新:

我找到了一种方法来做到这一点,但它并不像我希望的那么优雅。

在我在控制器中发送的自定义 ActionResult 的构造函数中,这样至少它将始终保持一致:

public JsonNetResult(object data, Controller controller) {
    SerializerSettings = new JsonSerializerSettings();
    _data = data;
    controller.ControllerContext.Controller.ViewData.Model = _data;
}

另一种方法是使用基本控制器自动处理操作参数集合的存储以供以后使用:

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Items["ActionParms"] = filterContext.ActionParameters.ToDictionary(p => p.Key, p => p.Value);
        base.OnActionExecuting(filterContext);
    }
}

然后在你的属性中:

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var dictionary = filterContext.HttpContext.Items["ActionParms"] as Dictionary<string, object>;
    if (dictionary != null)
    {
        foreach (var o in dictionary.Keys)
        {
            // do something here
        }   
    }            
    base.OnActionExecuted(filterContext);
}

它使用 HttpContext 项目,这不是很好,但我不知道您可以在属性中访问 ViewBag 或 ViewData 。

为了决定是否要在属性中处理请求,您可以询问操作名称和其他参数信息:

var action = filterContext.ActionDescriptor.ActionName;
var parms = filterContext.ActionDescriptor.GetParameters();
foreach (var parameterDescriptor in parms)
{
    // do something here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 模型在 OnExecuted 操作过滤器中为 null ...或者设置模型的更优雅的方式? 的相关文章

  • 如何为 Html.BuildUrlFromExpression 调用指定默认区域

    我有这样的问题链接文本 https stackoverflow com questions 2345293 how to specify default area without adding area to every actionlin
  • asp.net mvc 3 中模糊的远程属性验证

    asp net mvc 3 中的内置远程属性会执行 onchange 验证 我希望它在模糊时验证 有没有办法自定义它 或者还有其他东西可以这样做 我确信这是一个非常普遍的需求 你可以设置默认值 http docs jquery com Pl
  • 使用 EntityFramework 使用空参数值调用存储过程

    我在 sqlserver 2008 上有一个存储过程 其中一个参数接受空值 我不知道如何使用参数上的空值来调用该 SP 为了获得更多上下文 我正在使用 EntityFramework 6xx 在下一个示例中 参数 status Compat
  • 在 C# 中解析动态 SQL 并在 ASP.Net MVC 中绑定到 WebGrid

    在 C 中解析动态 SQL 并在 ASP Net MVC 中绑定到 WebGrid 我有动态 SQL 查询 它使用数据透视表来生成结果 结果集可能如下所示 Name Div1 Div2 Div3 Div4 Div5 Active 1 0 0
  • 块执行后变量返回 null

    我正在调度一个队列来在单独的线程上下载一些 flickr 照片 在 viewWillAppear 中 当我记录块内数组的内容时 它完美地显示了所有内容 dispatch queue t photoDowonload dispatch que
  • 使用资源字符串的 DisplayFormat 数据注释

    我想使用 DisplayFormat 数据注释来格式化模型数据 但我想使用资源文件中存储的格式字符串 我已经能够将资源类型和名称传递给某些数据注释 例如指定错误消息时 如何告诉 DisplayFormat 从我的资源文件之一获取格式字符串
  • 果园:自定义注册字段

    对于我的 Orchard 项目 我需要用户在注册时提供一些附加信息 说 名字 姓氏 裤子颜色 此信息必须在注册时输入 并且不能推迟到以后 根据客户的订单 我尝试使用配置文件和扩展注册插件来请求这些 但据我所知 这只为我提供了在注册表中显示的
  • MVC URL 路由自定义 url

    我想传递 url 链接 例如 http localhost 24873 Jobs companyname or http localhost 24873 companyname Jobs Preferred 我尝试在全局 aspx 文件中进
  • asp.net mvc - Ajax 刷新视图的每个元素

    希望在退出 jquery 对话框后使用 ajax 刷新当前页面 我有一个包含 foreach 循环的视图 数据是从模型中提取的 每个循环有 2 个编辑 删除按钮 当我单击 编辑按钮 时 将打开一个 jquery UI 对话框进行编辑 当我保
  • 检查多个变量java中的替换空值

    我试图找到一种简单的方法来在 Java 中的多个变量中执行多个 null 检查 替换 我有一个包含大约 20 个字符串变量的对象 在构造函数中 我想检查是否有任何变量值为空 如果它们为空 我想用空字符串替换它们 我可以执行一系列 if 语句
  • 在 mvc 中对远程验证的成功响应执行一些操作

    我正在使用远程验证来检查我的 asp net mvc 3 应用程序 C 注册期间用户名的可用性 我使用 MVC 远程属性验证 Remote IsUserNameAvailable User public string UserName ge
  • ASP.NET MVC4 CustomErrors DefaultRedirect 被忽略

    我有一个 MVC 4 应用程序 使用自定义 HandleErrorAttribute 仅处理自定义异常 我想拦截默认的 404 和其他非 500 错误页面 并用更有吸引力的内容替换它们 为此 我将以下内容添加到我的 Web config 中
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 在代码 MVC Razor 中渲染部分视图

    我正在使用 MVC 3 Razor 制作一个简单的 CMS 以用于实践目的 我的想法是创建一些部分视图 我想要进行数据库查找 并发现 3 个部分视图需要渲染到页面 我该怎么做 在 WebForms 中 您可以调用 LoadControl C
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • 如何使用 DropDownListFor

    我想向网页添加下拉列表 html 控件 并用产品列表填充它 我的动作控制器看起来像 public ActionResult Index return View repository GetProducts true 产品模型 Linq to
  • 如何创建可以从任何控制器和刀片文件访问的全局函数

    我有两个控制器文件 homecontroller 和 backendcontroller 创建全局函数并从两个文件访问它的最佳方法是什么 I found here https stackoverflow com questions 3241
  • Magento:如何覆盖本地模块中的模型

    我试图在本地文件夹中覆盖本地文件夹中的模块 但我不知道是否可能 这就是我所做的 我创建了 local Mycompany Modulename Model Model php 我想覆盖 local Othercompany Modulena
  • 可排序的 Telerik 网格 + NHibernate、IQueryable 和 ASP.NET MVC

    我正在尝试让 Telerik 网格工作 分页工作正常 我的视图代码如下所示 Html Telerik Grid Model Name Grid Columns columns gt columns Bound o gt o ItemName
  • 如何为 ApplicationController 中 after_action 过滤器中的所有操作渲染 json?

    是否可以在 Rails ApplicationController 中创建一个 after filter 方法 该方法在每个操作上运行并呈现为 JSON 我正在构建一个 API 并且希望将控制器中的每个操作的输出呈现为 JSON 客户控制器

随机推荐

  • 从 Fortran 字符串中提取单个字符

    我需要一个程序将基数 a 转换为基数 b 其中基数 a 和 b 可以是从 2 到 36 我的想法是使用字符串作为数字 作为中介转换为基数 10 然后从基数 10 转换为基数 b 由于我是 Fortran 新手 我不太理解函数和子字符串 现在
  • 如何从 ScheduledExecutorService 中删除任务?

    我有一个ScheduledExecutorService定期执行一些不同的任务scheduleAtFixedRate Runnable INIT DELAY ACTION DELAY TimeUnit SECONDS 我也有不一样的Runn
  • 使用 Underscore debounce 获取事件对象[React]

    我正在尝试对我已设法做到的操作使用去抖 但是我想将 e 作为参数传递 但它不起作用 我有什么办法可以做到这一点吗 constructor props context super props context this testing debo
  • Jupyter Notebook 上未显示结构化流输出

    我有两个笔记本 第一个笔记本正在使用 tweepy 从 twitter 读取推文并将其写入套接字 其他笔记本正在使用 Spark 结构化流 Python 从该套接字读取推文并将其结果写入控制台 不幸的是我没有在 jupyter 控制台上得到
  • Logstash 过滤器将“$epoch.$microsec”转换为“$epoch_millis”

    我正在尝试转换表单中的时间戳字段 epoch microsec to epoch millis Example 1415311569 541062 gt 1415311569541 Logstash 似乎没有任何乘法的方法 所以ts 100
  • WPF - 从 WPF 应用程序切换到 xbap

    我有一个可用的 WPF 应用程序 我希望看到它作为 xbap 运行 我需要在 WPF 应用程序中更改哪些内容才能使其作为 xbap 运行 当谈到可以以图形方式执行的操作时 两者之间的唯一区别是 XBAP 无法使用 BitmapEffects
  • 在 Kubernetes 中向 MySQL 添加另一个用户

    这是我的MySQL apiVersion apps v1beta1 kind Deployment metadata name abc def my mysql namespace abc sk test labels project ab
  • jQueryUI:正确删除可拖动元素

    我正在开发一个可视化编辑器 它需要用户可以根据需要添加 删除和拖动元素 每个元素都是一个div使用 jQueryUI 实现可拖动 新元素被附加到父元素上div代表工作空间 每个元素内部都有一个用于将其删除的按钮 这一切都很好 我遇到的问题是
  • 用于多部分/表单数据的 POSTMAN

    如何将 POSTMAN 用于 Multipart form data 它具有自定义标头来测试我的控制器 该控制器采用 2 个文件作为参数 public controller MultipartFile files POST HTTP 1 1
  • 未捕获(承诺中)语法错误:获取函数中出现意外的标记'

    我有几个结构如下的 JSON 文件 我们称之为 info json data title Job company Company past fulltime Former Company intern Women IT Priority 5
  • Joomla:在组件中编写和调用辅助函数

    初出茅庐的 Joomla PHP 开发人员 在了解如何做到这一点时遇到了困难 我发现搜索的所有内容都是旧版本的 Joomla 或其他框架 因此第一次时一切都很混乱 我想要一个可以从组件中的任何位置调用的辅助函数 基本上它需要一个用户 ID
  • 根据第二列求和并有条件地计数

    我在试图解决这个看似简单的问题时感到沮丧 我有一个像这样的数据集 df structure list Year c 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 2015L 20
  • 使用 page_action 时不出现弹出窗口

    我是 Google Chrome 扩展开发的新手 我有以下两个疑问 我使用时没有出现弹出窗口page action在manifest json中 但在我使用时出现browser action 我想知道为什么 还是我做错了 该图标也显示为非活
  • 如何卸载其他用户安装的应用程序?

    当我尝试调试 Windows 8 应用程序并且另一个用户帐户上已安装了一个副本时 我不断遇到此问题 DEP0700 应用程序注册失败 另一个用户已经安装了此应用程序的打包版本 未打包的版本无法替代它 冲突的包是 PackageName 由
  • 在 Objective-C 中向 nil 发送消息

    作为一名正在阅读 Apple 的 Objective C 2 0 文档的 Java 开发人员 我想知道 向 nil 发送消息 意味着 更不用说它实际上如何有用了 摘录自文档 Cocoa中有几种模式 利用这一事实 这 消息返回的值为零 也可能
  • 在 JavaScript/Node.js 中将 Youtube Data API V3 视频持续时间格式转换为秒

    我正在尝试将 ISO 8601 字符串转换为 JS Node 中的秒 我能想到的最好的办法是 function convert time duration var a duration match d g var duration 0 if
  • asp和iis 6.0从哪里获取其日期格式

    我发现了一个带有新网络服务器的小泡菜 我们有一个新的网络服务器 它显示的日期与我们旧的网络服务器不同 我们在 Windows Server 2003 的 IIS 6 0 上运行 asp 经典网页 我们以管理员身份登录并设置适当的区域设置 然
  • Python 模块导入对一个文件有效,对另一个文件则失败

    我面临着一个非常奇怪的问题 我有三个文件 第一个包含基类 其他两个文件中的类继承自该基类 奇怪的是 昨天一切都工作正常 但今天其中一个文件不再工作了 在此期间我还没有接触过进口 orangecontrib init py prototype
  • 在 Linq 中添加对 XML 文档的样式表引用?

    我创建了一个 XML 文档 并希望获得对 XSLT 文件的引用 到此 XML 生成 XElement xml new XElement ReportedOn from dl in EL DocumentLog ToList join o i
  • MVC 模型在 OnExecuted 操作过滤器中为 null ...或者设置模型的更优雅的方式?

    我有一个 ActionFilter 它覆盖了 OnActionExecuted 方法 在 POST 操作中 filterContext Controller ViewData Model 始终为 null 我确实发现下面的文章似乎在说它不应