正在OnResultExecuted筛选器上获取ViewBag



我想在OnResultExecuted过滤器中获得ViewBag。两个

((ViewResultBase)filterContext.Result).ViewBag.Get

filterContext.Controller.ViewBag.Get

返回在操作中分配的CCD_ 3。但我想在"view.cs.html"中分配ViewBag
我想获得的是从剃刀中获得ViewBag.Title

@{
ViewBag.Title = "My Title";
}

然后,将其作为javascript写入响应文本的末尾。这在@Ajax.ActionLink()情况下非常有用。我的OnActionExecuted过滤器代码必须是这样的:

string scriptText = "<script type='text/javascript'>document.title = '" + ViewBag.Title + "';</script>";
filterContext.HttpContext.Response.Write(scriptText);

如有任何帮助,我们将不胜感激。

不能将值从视图传递到控制器。它基本上是反对MVC模式的。执行视图时,它将获得ViewData(ViewBag)的自己的副本,因此对它的任何更改仅在视图的范围内有效。

来自Scott Guthrie的博客:

视图不应包含任何应用程序逻辑或数据库检索相反,所有应用程序/数据逻辑都应该只由控制器类。这种分区背后的动机是帮助强制将应用程序/数据逻辑与UI明确分离生成代码。这使得对您的与UI呈现逻辑隔离的应用程序/数据逻辑。

视图应仅使用视图特定的数据来呈现其输出由Controller类传递给它。在ASP.NET MVC框架中,我们将此视图特定的数据称为"ViewData"。此博客文章的其余部分将涵盖你可以用来通过的一些不同方法这个"ViewData"从控制器到视图进行渲染。

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

这里也有类似的问题和解释:将Partial中的ViewData项设置为在View 中读取

离你的问题更近了。不能将Title的值传递给操作执行筛选器,必须在控制器的作用域中进行解析。

最新更新