我想在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的值传递给操作执行筛选器,必须在控制器的作用域中进行解析。