Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在OnResultExecuted筛选器上获取ViewBag_Asp.net Mvc_Razor_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 在OnResultExecuted筛选器上获取ViewBag

Asp.net mvc 在OnResultExecuted筛选器上获取ViewBag,asp.net-mvc,razor,asp.net-mvc-4,Asp.net Mvc,Razor,Asp.net Mvc 4,我想在OnResultExecuted过滤器上获取ViewBag。两者 ((ViewResultBase)filterContext.Result).ViewBag.Get 及 返回在操作时分配的ViewBag。但是我想在“view.cshtml”中分配ViewBag。 我想实现的是从razor获得ViewBag.Title @{ ViewBag.Title = "My Title"; } 然后,将其作为javascript写入响应文本的末尾。这在@Ajax.ActionLink()情况下非

我想在
OnResultExecuted
过滤器上获取
ViewBag
。两者

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

返回在操作时分配的
ViewBag
。但是我想在“view.cshtml”中分配
ViewBag

我想实现的是从razor获得
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);
string scriptText=“document.title=”+ViewBag.title+”;”;
filterContext.HttpContext.Response.Write(scriptText);

任何帮助都将不胜感激。

您不能将值从视图传递到控制器。这基本上与MVC模式背道而驰。执行视图时,它将获得自己的
ViewData
ViewBag
)副本,因此对其所做的任何更改仅在视图范围内有效

来自Scott Guthrie的博客:

视图不应包含任何应用程序逻辑或数据库检索 相反,所有应用程序/数据逻辑只应由 控制器类。这种分区背后的动机是为了提供帮助 实施应用程序/数据逻辑与UI的清晰分离 生成代码。这使得单元测试更容易 应用程序/数据逻辑与UI呈现逻辑隔离

视图应仅使用视图特定的数据呈现其输出 由控制器类传递给它。在ASP.NETMVC框架中,我们 将此视图特定数据称为“视图数据”。这篇博文的其余部分 将介绍一些你可以用来通过考试的不同方法 此“视图数据”从控制器传输到要渲染的视图

这里也有类似的问题和解释:


更接近你的问题。无法将Title的值传递给操作执行筛选器,必须在控制器的作用域中解析该值。

无法将值从视图传递给控制器。这基本上与MVC模式背道而驰。执行视图时,它将获得自己的
ViewData
ViewBag
)副本,因此对其所做的任何更改仅在视图范围内有效

来自Scott Guthrie的博客:

视图不应包含任何应用程序逻辑或数据库检索 相反,所有应用程序/数据逻辑只应由 控制器类。这种分区背后的动机是为了提供帮助 实施应用程序/数据逻辑与UI的清晰分离 生成代码。这使得单元测试更容易 应用程序/数据逻辑与UI呈现逻辑隔离

视图应仅使用视图特定的数据呈现其输出 由控制器类传递给它。在ASP.NETMVC框架中,我们 将此视图特定数据称为“视图数据”。这篇博文的其余部分 将介绍一些你可以用来通过考试的不同方法 此“视图数据”从控制器传输到要渲染的视图

这里也有类似的问题和解释:


更接近你的问题。您不能将Title的值传递给操作执行筛选器,您必须在控制器的范围内解析它。

这意味着您知道正确的答案。如果是的话,你可以回答我的问题。这意味着你知道正确的答案。如果是的话,你可以回答我的问题。我重新阅读了你的问题,删除了我的评论和建议,因为现在我觉得我不太理解你的要求。那javascript是干什么用的?为什么要用js设置标题?您是否打算通过单击您提到的@Ajax.ActionLink来更改document.title?是的,当您单击Ajax.ActionLink()时,文档标题不会更改。我希望它能够自动更改。好的,请将其作为新问题发布-如何使用@Ajax.ActionLink更新Html文档标题-这样其他人也可以为您建议解决方案(我也想到了一个),请参考此线程。我重新阅读了你的问题,删除了我的评论和建议,因为现在我觉得我不太理解你的要求。那javascript是干什么用的?为什么要用js设置标题?您是否打算通过单击您提到的@Ajax.ActionLink来更改document.title?是的,当您单击Ajax.ActionLink()时,文档标题不会更改。我希望它能够自动更改。好的,请将其作为新问题发布-如何使用@Ajax.ActionLink更新Html文档标题-这样其他人也可以为您建议解决方案(我也想到了一个),请参考此线程。
string scriptText = "<script type='text/javascript'>document.title = '" + ViewBag.Title + "';</script>";
filterContext.HttpContext.Response.Write(scriptText);