Что заменило ClientScriptManager в MVC?
Я преобразую приложение ASP.NET Forms (которое я не писал) в приложение MVC 3. ClientScriptManager используется в старом приложении. ClientScriptManager не существует в MVC 3. Что заменило ClientScriptManager? Я прочитал достаточно, чтобы понять, что CSM как-то связан с функциональностью AJAX в ASP.NET; он регистрирует "наборы" js-скриптов и функций, несколько схожих с тем, как EditorTemplates работают для наборов похожих элементов управления. Я не обязательно ищу реализацию CSM в MVC; Я просто хочу знать, какие практики Microsoft внедрила, что сделало CSM устаревшим.
2 ответа
ASP.Net MVC был разработан для того, чтобы дать вам полный контроль над HTML и js, а не для того, чтобы фреймворк отображал их для вас, как в ASP.Net. Таким образом, ничто действительно "не заменяет" ClientScriptManager. В результате, это зависит только от вас, как вы справляетесь с JS.
Вы можете сделать что-то простое, например, включить <script ...>
теги для ссылки на встроенный скрипт или JS-файлы в вашем _Layout.cshtml
файл, или вы можете использовать какой-то JavaScript Loader, например RequireJS, или придумать свою собственную схему, полностью используя "Html Helpers" или что-то в этом роде.
MVC 4 представил концепцию связывания, которая позволяет вам определять коллекции скриптов как "связки", и MVC автоматически минимизирует и объединяет их для вас, когда вы ссылаетесь на них в своих представлениях следующим образом:
@Scripts.Render("~/bundles/jquery")
Ниже приведен пример рендеринга 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');
}
Ниже приведен пример рендеринга 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());
}
Таким образом, используя этот подход, вам не нужно упоминать следующий код в представлении.
<script src="Your Path" type="text/javascript"></script>