Что заменило 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>
Другие вопросы по тегам