2017-01-20 8 views
-2

Я застрял на этом некоторое время. У меня есть страница макета, которая загружает jQuery версии 2.2.3. И у меня есть div (сортировка info-boxes), в которой я загружаю частичное представление, которое имеет jqgrid. Jqgrid нуждается в библиотеке jquery, поэтому у меня есть библиотека jquery в моем частичном представлении, потому что частичный вид не имеет макета, поэтому мне нужно загрузить все скрипты. Но проблема в том, что на веб-странице загружаются библиотеки jquery, один из макета и один из частичного представления, что приводит к конфликтующему поведению. В меню боковой панели есть меню с аккордеонами, где при нажатии на заголовок открывается подменю. Это неправильно работает из-за двух jquery-библиотек. На других веб-страницах, где нет частичных представлений, меню боковой панели работает очень хорошо. Я надеюсь, что смогу найти работу по этой проблеме.включают jquery в частичном представлении и странице макета в asp.net mvc

Пожалуйста, дайте мне знать, если есть какие-либо вопросы, иногда сочленение может быть проблемой для меня. Спасибо за любые входы.

Не знаете, почему это занижено. Если вы хотите понизить его, вы можете также дать мне некоторый вклад, прежде чем отбрасывать его.

В том числе фрагмент кода -

макет страницы:

<head> 

    <script src="~/jQuery/jquery-2.2.3.min.js"></script> 
<!-- Bootstrap 3.3.6 --> 
<script src="~/Scripts/bootstrap.min.js"></script> 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

    </head> 

Частичный вид: Что я загрузить в DIV, которая находится в представлении.

не публиковать вид, просто поместив фрагмент кода частичного представления.

<script src="~/scripts/jquery-2.2.4.js"></script> 
    <script src="~/Scripts/free-jqGrid/i18n/grid.locale-en.js"></script> 
    <script src="~/Scripts/free-jqGrid/jquery.jqgrid.min.js"></script> 

    <link href="~/Content/themes/base/jquery.ui.theme.css" rel="stylesheet" /> 
    @*<link href="~/Content/jquery.custom/jquery-ui-1.12.1.custom-jquery-ui.css" rel="stylesheet" />*@ 
    <link href="~/Content/ui.jqgrid.min.css" rel="stylesheet" /> 

    <script src="~/Scripts/jqgridinternalapproved.js"></script> 

Для загрузки jqgridinternalapproved.js мне нужна библиотека jquery. Но это приведет к 2 библиотекам jquery! Не уверен, что делать, чтобы исправить это.

+0

Частицы никогда не должны содержать сценарии (или таблицы стилей). Включите их только в макет или основной вид –

ответ

0

Ваш частичный вид должен предполагать, что зависимость jQuery уже предоставлена. Глобальные библиотеки должны быть включены в ваш макет. Если проблема в том, что вы пытаетесь загрузить частичный вид самостоятельно и по-прежнему нуждаетесь в поддержке jQuery, вы не должны так делать. Частичные представления никогда не должны загружаться как целая страница в браузере; они должны либо отображаться в полном виде, либо помещаться в полностью существующую HTML-страницу через AJAX. Если все, что вы хотите загрузить, это часть частичного просмотра в виде всего представления в браузере, а затем просто создайте более упрощенную базовую компоновку, которую может использовать частичный вид и которая уже включает jQuery. Например:

_BaseLayout.cshtml

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>@ViewBag.Title</title> 
     @RenderSection("Meta", required: false) 
     @RenderSection("Styles", required: false) 
    </head> 
    <body> 
     @RenderBody() 
     @Script.Render("~/bundles/jquery") 
     @RenderSection("Scripts", required: false) 
    </body> 
</html> 

_Layout.cshtml

@{ Layout = "~/Views/Shared/_BaseLayout.cshtml"; } 

<!-- remainder of your layout HTML here (i.e. stuff within <body></body>) --> 

@section Meta 
{ 
    <!-- additional global meta for layout here --> 
    @RenderSection("Meta", required: false) 
} 

@section Styles 
{ 
    <!-- additional global styles for layout here --> 
    @RenderSection("Styles", required: false) 
} 

@section Scripts 
{ 
    <!-- additional global scripts for layout here --> 
    @RenderSection("Scripts", required: false) 
} 

Это, по существу, расширение макетов. Каков ваш основной файл макета теперь использует его собственный макет и добавляет дополнительный код, так же, как и представление. Это работает, потому что макеты - это просто специализированные представления. Секции должны быть переопределены в каждом макете, чтобы сделать их доступными для просмотров, которые используют эти макеты.

С этим, где вы ранее возвращали бы частичный вид на свой собственный, вместо этого вы вернете представление, которое использует _BaseLayout.cshtml в качестве его макета и отображает частичное. Таким образом, вы все равно получаете свою зависимость jQuery и полный полный HTML-документ, не включая все материалы из вашего обычного макета.