每當我們調用任何操作控制器是否通過完整的回發或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