Предотвращение загрузки пакетов ASP.NET MVC более одного раза
Есть ли встроенный метод отслеживания, если пакет уже был загружен? У меня есть несколько видов редактирования, для примера которых требуются библиотеки jquery, jquery.Validate и т. Д. Который мне не нужно ссылаться на главной странице макета. Поскольку страница может состоять из нескольких различных условных библиотек... в идеале я хотел бы, чтобы @scripts.Render знал, уже ссылался ли я на библиотеку, и предотвращал ли ее перезагрузку.
Ура Тим
4 ответа
Я думаю, что и у Hao Kung, и у user108 есть кусочки вашего ответа.
Хао Кунг обращается к способности системы знать, что вы уже включили пакет на страницу, и избегать добавления дубликата. Это похоже на то, что делает скрипт / стиль в WordPress. У MVC этого пока нет. Вы должны были бы построить это самостоятельно.
user108 представляет возможное решение вашей проблемы. Он / она говорит, что в вашем макете вы можете создать дополнительный раздел "Сценарии". Затем в представлениях, для которых требуется код проверки jquery, вы можете включить его в раздел "Сценарии" макета. Это позволит выполнить большую часть того, что вы ищете. Единственное место, где это не сработает, - это наличие нескольких партиалов просмотра на одной странице, для которых требуется код проверки jquery.
Вы могли бы реализовать решение для этого самостоятельно довольно легко. Вот так пост, который поможет вам начать.
Похоже, вы просите что-то более похожее на управление активами, где вы можете несколько раз регистрировать сценарии регистрации и иметь API для автоматической дедупликации и отображения соответствующего списка. Это находится в нашем списке задач, но в настоящее время еще не является частью API.
Если это то, что вы хотели бы, вы можете проголосовать за это на нашем сайте codeplex: Эта проблема
Попробуй это:
public static MvcHtmlString RequireClientScript(this HtmlHelper helper, string scriptPath)
{
var scripts = helper.ViewContext.HttpContext.Items["client-script-list"] as Dictionary<string, string> ?? new Dictionary<string, string>();
if (!scripts.ContainsKey(scriptPath))
{
var sb = new StringBuilder();
var scriptTag = new TagBuilder("script");
scriptTag.Attributes.Add("type", "text/javascript");
scriptTag.Attributes.Add("src", scriptPath);
sb.AppendLine(scriptTag.ToString());
scripts.Add(scriptPath, scriptPath);
helper.ViewContext.HttpContext.Items["client-script-list"] = scripts;
return new MvcHtmlString(sb.ToString());
}
return MvcHtmlString.Empty;
}
Если вы используете частичное представление, вам нужны справочные библиотеки скриптов
в верхней части страницы только добавить необходимый скрипт добавить как
@Scripts.Render("~/bundles/jquery")
затем добавьте тег тела внизу
@RenderSection("scripts", required: false)
любой другой раздел сценариев расширения страницы, например
@section scripts{
<script src="/Scripts/jquery.validation.js" type="text/javascript"></script>
}