每当我们调用任何操作控制器是否通过完整的回发或ajax调用我想检查视图模型,并根据一些逻辑注入一些JavaScript是在浏览器中执行。该应用程序大部分已经编码,我试图做的是有一些通用的代码可以做到这一点。我想知道做什么是最好的方法。 我在考虑使用动作过滤器,然后检查模型,然后在需要时注入js。但不知道该如何工作,如行动执行等事件。任何代码示例将有所帮助。每个控制器动作注入JavaScript - asp.net mvc
另一种选择是在客户端进行。但也不知道如何以通用的方式正确地做到这一点。
每当我们调用任何操作控制器是否通过完整的回发或ajax调用我想检查视图模型,并根据一些逻辑注入一些JavaScript是在浏览器中执行。该应用程序大部分已经编码,我试图做的是有一些通用的代码可以做到这一点。我想知道做什么是最好的方法。 我在考虑使用动作过滤器,然后检查模型,然后在需要时注入js。但不知道该如何工作,如行动执行等事件。任何代码示例将有所帮助。每个控制器动作注入JavaScript - asp.net mvc
另一种选择是在客户端进行。但也不知道如何以通用的方式正确地做到这一点。
重新考虑覆盖基本控制器的OnActionExecuted事件,该事件应该允许您在视图模型被操作处理后访问视图模型。然而,我很好奇,你到底怎样才能在AJAX响应中注入一段JavaScript代码,这通常是一个简单的JSON对象?
如果所有你真的问的是如何从控制器插入JavaScript,你可以把你的观点如下:
<script type="text/javascript" defer="defer">
@Html.Raw(ViewBag.StartupScript)
</script>
你可以在上面添加到特定视图或页面布局。然后,你可以做这样的事情:
public class MyController : Controller
{
public override void OnActionExecuted(...)
{
if (...)
{
ViewBag.StartupScript = "alert('hello world!');";
}
}
}
是我知道的部分。我的问题正是你所问的。在这个事件中,如何注入JavaScript在客户端执行?在asp.net web表单中有注册脚本,但是如果在mvc中没有办法做到这一点的话。 – user784796 2012-04-10 21:05:18
我在帖子中添加了一个示例。 – Chris 2012-04-10 21:41:34
工作。谢谢克里斯。几乎没有更正。 您的控制器代码中缺少分号。 ViewBag.StartupScript =“alert('hello world!');”; 而在视图中应该是 @ Html.Raw(@ ViewBag.StartupScript),否则你的脚本将无法运行。 – user784796 2012-04-11 14:46:29
要注入的回传以及Ajax调用这里是你如何能做到这一点:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script type=\"text/javascript\">\n\t");
sb.Append("alert('Hello Injection');");
sb.Append("</script>\n");
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Write(sb.ToString());
}
else
{
ViewBag.StartupScript = sb.ToString();
}
}
也许不是最干净的解决办法,但工程。
filterContext.HttpContext.Response.Write(sb.ToString()); 这将覆盖来自Ajax调用的部分视图,任何四处走动?
每个页面的javascript是否相同? – 2012-04-10 20:41:58
您能否将js代码添加到MasterPage? – Vitall 2012-04-17 05:52:11