我正在将一个ASP.NET Forms应用程序(我没写过)转换为MVC 3应用程序。 ClientScriptManager用于旧应用程序。 MVC 3中不存在ClientScriptManager。什么取代了ClientScriptManager?我已经做了足够的阅读,知道CSM与ASP.NET中的AJAX功能有关;它注册了js脚本和函数的“集合”,类似于EditorTemplates如何为类似控件集合工作。我不一定希望在MVC中实现CSM;我只是想知道微软采用什么做法使CSM过时。
答案 0 :(得分:3)
ASP.Net MVC旨在让您完全控制HTML和js,而不是像ASP.Net那样让框架为您呈现这些内容。因此,没有什么能真正“替换”ClientScriptManager。因此,完全取决于您如何处理您的js。
您可以执行一些简单的操作,例如包含<script ...>
标记来引用_Layout.cshtml
文件中的内联脚本或js文件,或者您可以使用某种JavaScript加载程序,例如RequireJS或者出现使用自己的方案完全使用“Html Helpers”或其他东西。
MVC 4引入了bundling的概念,它允许您将脚本集合定义为“捆绑”,并让MVC在您的视图中引用它们时自动缩小并合并它们,如下所示:
@Scripts.Render("~/bundles/jquery")
答案 1 :(得分:-1)
以下是从Controller渲染JavaScript(函数)的示例。
<强>控制器强>
public ActionResult Index(int? id)
{
ViewBag.MyAlert = "<script type='text/javascript'>MyAlert();</script>";
}
查看强>
<script src="Your Path" type="text/javascript"></script>
@Html.Raw(ViewBag.MyAlert)
<强> JS 强>
function MyAlert() {
alert('Hi');
}
以下是从Controller渲染JavaScript(文件)的示例。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script src='Your Path' type='text/javascript'></script>");
filterContext.HttpContext.Response.Write(sb.ToString());
}
因此,使用此方法,您无需在View中提及以下代码。
<script src="Your Path" type="text/javascript"></script>