У меня есть этот раздел, определенный в моем _Layout.cshtml
@RenderSection("Scripts", false)
Я могу легко использовать это из вида:
@section Scripts {
@*Stuff comes here*@
}
То, с чем я бьюсь, это то, как вводить некоторый контент в этот раздел из частичного представления.
Давайте предположим, что это моя страница просмотра:
@section Scripts {
<script>
//code comes here
</script>
}
<div>
poo bar poo
</div>
<div>
@Html.Partial("_myPartial")
</div>
Мне нужно вставить какой-то контент в Scripts
раздел из _myPartial
частичного представления.
Как я могу это сделать?
Ответы:
Разделы не работают в частичном представлении, и это по замыслу. Вы можете использовать несколько пользовательских помощников для достижения аналогичного поведения, но, честно говоря, ответственность за включение необходимых сценариев лежит на представлении, а не на частичном. Я бы порекомендовал использовать раздел @scripts на главном экране, чтобы не беспокоиться о скриптах по частям.
источник
Это довольно популярный вопрос, поэтому я опубликую свое решение.
У меня была та же проблема, и хотя она не идеальна, я думаю, что она на самом деле работает довольно хорошо и не делает частичную зависимость от представления.
Мой сценарий состоял в том, что действие было доступно само по себе, но также могло быть встроено в представление - карту Google.
По моему у
_layout
меня есть:На мой
index
взгляд, я имею:На мой
clients
взгляд у меня есть (все карты и доц. Html):Мой
Clients_Scripts
вид содержит JavaScript, который будет отображаться на страницеТаким образом, мой сценарий изолирован и может быть отображен на странице там, где требуется, с
body_scripts
тегом, отображаемым только при первом появлении, когда механизм просмотра бритвы находит его.Это позволяет мне отделить все - это решение, которое работает довольно хорошо для меня, у других могут быть проблемы с ним, но оно исправляет дыру «по замыслу».
источник
Из решений в этой теме я пришел к следующему, вероятно, слишком сложному решению, которое позволяет отложить рендеринг любого html (также скриптов) в блоке using.
ИСПОЛЬЗОВАНИЕ
Создать «раздел»
Типичный сценарий: при частичном просмотре включайте блок только один раз, независимо от того, сколько раз частичное представление повторяется на странице:
В частичном представлении включите блок для каждого использования частичного:
В частичном представлении включайте блок только один раз, независимо от того, сколько раз повторяется частичное, но позже визуализируйте его конкретно по имени
when-i-call-you
:Визуализировать «разделы»
(т.е. отобразить отложенный раздел в родительском представлении)
КОД
источник
isOnlyOne
, но только если вы хотите отобразить его в определенном месте по имени, вы предоставляете идентификатор в противном случае это сбрасывается вHtml.RenderDelayed()
.У меня была эта проблема и я использовал эту технику.
Это лучшее решение, которое я нашел, которое очень гибкое.
Также, пожалуйста, проголосуйте здесь, чтобы добавить поддержку кумулятивной декларации раздела
источник
Если у вас есть законная необходимость запустить некоторые
js
из нихpartial
, вот как вы можете это сделатьjQuery
:источник
Следуя ненавязчивому принципу, для _myPartial совсем не обязательно вводить контент непосредственно в раздел скриптов. Вы можете добавить эти скрипты частичного представления в отдельный
.js
файл и ссылаться на них в разделе @scripts из родительского представления.источник
В нашем мышлении есть фундаментальный недостаток, особенно при использовании MVC. Недостаток в том, что JavaScript как-то отвечает за представление. Представление - это представление, JavaScript (поведенческий или иной) - это JavaScript. В паттернах Silverlight и WPF MVVM мы сталкиваемся с «видом сначала» или «моделью сначала». В MVC мы всегда должны пытаться рассуждать с точки зрения модели, и JavaScript является частью этой модели во многих отношениях.
Я бы предложил использовать шаблон AMD (мне самому нравится RequireJS ). Разделяйте ваш JavaScript в модулях, определяйте свою функциональность и подключайтесь к html из JavaScript вместо того, чтобы полагаться на представление для загрузки JavaScript. Это очистит ваш код, разделит ваши проблемы и облегчит жизнь одним махом.
источник
window
объекта и включаю библиотечные сценарии перед любыми частями.Цель ОП заключается в том, что он хочет определить встроенные сценарии в своем частичном представлении, которое, как я предполагаю, является специфичным только для этого частичного представления, и включить этот блок в свой раздел сценариев.
Я понял, что он хочет, чтобы этот Частичный Взгляд был самодостаточным. Идея аналогична компонентам при использовании Angular.
Мой способ состоял бы в том, чтобы просто сохранить сценарии в Частичном представлении как есть. Теперь проблема заключается в том, что при вызове Partial View он может выполнить сценарий там раньше всех других сценариев (который обычно добавляется в конец страницы макета). В этом случае у вас есть только скрипт Partial View, ожидающий другие скрипты. Есть несколько способов сделать это. Самый простой, который я использовал раньше, это использование события на
body
.На моем макете у меня было бы кое-что на основании как это:
Тогда на моем частичном виде (внизу):
Другое решение заключается в использовании стека для передачи всех ваших скриптов и вызова каждого из них в конце. Другим решением, как уже упоминалось, является шаблон RequireJS / AMD, который также очень хорошо работает.
источник
Первое решение, о котором я могу подумать, это использовать ViewBag для хранения значений, которые должны быть отображены.
С одной стороны, я никогда не пробовал, если это работа с частичной точки зрения, но это должно имо.
источник
ViewBag.RenderScripts = new List<string>();
в верхней части главной страницы, затем вызвал@Html.Partial("_CreateUpdatePartial",Model,ViewData)
, затем поместил@section Scripts {@foreach (string script in ViewBag.RenderScripts) Scripts.Render(script); }}
. В частичном представлении я поставил@{ViewBag.RenderScripts = ViewBag.RenderScripts ?? new List<string>();ViewBag.RenderScripts.Add("~/bundles/jquery");}
.Вам не нужно использовать разделы в частичном представлении.
Включить в свой частичный вид. Он выполняет функцию после загрузки jQuery. Вы можете изменить условие условия для вашего кода.
Хулио Спейдер
источник
Вы можете использовать эти методы расширения : (Сохранить как PartialWithScript.cs)
Используйте как это:
Пример частичный: (_MyPartial.cshtml) Поместите html в if, а js в else.
В вашем _Layout.cshtml или там, где вы хотите, чтобы выполнялись скрипты из партиалов, поместите следующее (один раз): он будет отображать только javascript всех партиалов на текущей странице в этом месте.
Затем, чтобы использовать ваш частичный, просто сделайте это: он будет отображать только HTML в этом месте.
источник
Есть способ вставить разделы в частичные представления, хотя это не красиво. У вас должен быть доступ к двум переменным из родительского представления. Поскольку частью вашего частичного представления является создание этого раздела, имеет смысл требовать эти переменные.
Вот как выглядит вставка раздела в частичном представлении:
А на странице вставляем частичный вид ...
Вы также можете использовать эту технику для программного определения содержимого раздела в любом классе.
Наслаждайтесь!
источник
Идея Плутона в лучшем виде:
CustomWebViewPage.cs:
Views \ web.config:
Посмотреть:
Частичное (_BackendSearchForm.cshtml):
Страница макета:
источник
Это сработало для меня, позволив мне совмещать javascript и html для частичного просмотра в одном файле. Помогает в мыслительном процессе, чтобы увидеть HTML и связанные части в одном файле частичного просмотра.
В представлении, которое использует частичное представление, называемое "_MyPartialView.cshtml"
В файле частичного просмотра
источник
Я решил это совершенно другим путем (потому что я спешил и не хотел реализовывать новый HtmlHelper):
Я обернул свой частичный вид в большое выражение if-else:
Затем я дважды вызвал Partial с пользовательскими данными ViewData:
источник
@Html.Partial("MyPartialViewScripts")
У меня была похожая проблема, где у меня была главная страница следующим образом:
но частичное представление зависело от некоторого JavaScript в разделе Scripts. Я решил это путем кодирования частичного представления в виде JSON, загрузки его в переменную JavaScript и последующего использования этого для заполнения div, поэтому:
источник
по выбору, вы можете использовать вашу папку / index.cshtml в качестве главной страницы, а затем добавить сценарии раздела. Затем, в вашем макете у вас есть:
и ваш index.cshtml:
и он будет работать над всеми вашими частичными взглядами. Это работает для меня
источник
Используя Mvc Core, вы можете создать аккуратный TagHelper,
scripts
как показано ниже. Это может быть легко преобразовано вsection
тег, где вы также даете ему имя (или имя взято из производного типа). Обратите внимание, что внедрение зависимости должно быть настроено дляIHttpContextAccessor
.При добавлении скриптов (например, в частичном)
При выводе скриптов (например, в файле макета)
Код
источник
На днях я столкнулся с почти идентичной проблемой, за исключением того, что частичное представление было ответом на запрос AJAX. В моей ситуации частичное было фактически полной страницей, но я хотел, чтобы оно было доступно как частичное с других страниц.
Если вы хотите визуализировать разделы частично, самое чистое решение - создать новый макет и использовать переменную ViewBag. Это не работает с
@Html.Partial()
или новым<partial></partial>
, используйте AJAX.Основной вид (который вы хотите визуализировать как частичное в другом месте):
контроллер:
_layoutPartial.cshtml (new):
Тогда используйте AJAX на своей странице.
Если вы хотите отобразить страницу в главном макете (не частичную), не устанавливайте
ViewBag.Partial = true
. Нет необходимости в помощниках HTML.источник
Ну, я полагаю, что другие авторы предоставили вам средство для непосредственного включения @section в ваш фрагмент (с помощью сторонних помощников html).
Но я считаю, что, если ваш сценарий тесно связан с вашим частичным, просто поместите свой javascript прямо внутри встроенного
<script>
тега в вашем частичном и покончите с этим (просто будьте осторожны с дублированием скрипта, если вы собираетесь использовать частичное более одного раза в едином представлении);источник
Предположим, у вас есть частичное представление _contact.cshtml, ваш контакт может быть юридическим (имя) или физическим субъектом (имя, фамилия). Ваше мнение должно позаботиться о том, что отображается, и что может быть достигнуто с помощью JavaScript. поэтому может потребоваться отложенный рендеринг и JS изнутри.
единственный способ, которым я думаю, как это можно опустить, - это когда мы создаем ненавязчивый способ решения таких проблем пользовательского интерфейса.
Также обратите внимание, что у MVC 6 будет так называемый View Component, даже у фьючерсов MVC были некоторые подобные вещи, и Telerik также поддерживает такую вещь ...
источник
Я только добавил этот код в свое частичное представление и решил проблему, хотя и не очень чисто, она работает. Вы должны убедиться, что идентификаторы объектов, которые вы отображаете.
источник
У меня была похожая проблема, решенная с помощью этого:
Это хороший способ сделать инъекцию.
источник