как добавить скрипт src внутри представления при использовании макета


101

Я хочу включить ссылку на javascript, например:

<script src="@Url.Content("~/Scripts/jqueryFoo.js")" type="text/javascript"></script>

Если у меня есть Razor View, как правильно включить его, не добавляя его в макет (мне это нужно только в одном конкретном представлении, а не во всех)

В aspx мы могли бы использовать заполнители содержимого. Я нашел более старые примеры, использующие aspx в mvc, но не Razor view.


1
Просто добавьте тег скрипта в свое представление.
jrummell

1
Я просто хочу добавить сценарий в свое представление, но когда я просматриваю исходный код на создаваемой странице, он помещает теги сценария внутри <body> html вместо <head>?
dferraro

для новейших браузеров type = "text / javascript" не нужен
Марк

Ответы:


172

В зависимости от того, как вы хотите его реализовать (если было определенное место, где вам нужны сценарии), вы можете реализовать @sectionвнутри себя, _Layoutчто позволит вам добавлять дополнительные сценарии из самого представления, при этом сохраняя структуру. например

_Layout

<!DOCTYPE html>
<html>
  <head>
    <title>...</title>
    <script src="@Url.Content("~/Scripts/jquery.min.js")"></script>
    @RenderSection("Scripts",false/*required*/)
  </head>
  <body>
    @RenderBody()
  </body>
</html>

Посмотреть

@model MyNamespace.ViewModels.WhateverViewModel
@section Scripts
{
  <script src="@Url.Content("~/Scripts/jqueryFoo.js")"></script>
}

В противном случае то, что у вас есть, нормально. Если вы не возражаете против того, чтобы оно было «встроенным» в выводимое представление, вы можете разместить <script>объявление внутри представления.


3
Кстати, разделы - это, по сути, ваши заполнители контента, о которых вы говорили. Посмотрите веб-проект MVC по умолчанию и то, как они размещают заголовок на странице.
Брэд Кристи

Спасибо. Это было то, что я искал, но можно ли сделать это без RenderSection? Вы говорите: «То, что у вас есть, в порядке», но у меня пока ничего нет ... Я попытался поместить ссылки на скрипты в верхней части .cshtml, но в результате ссылки находятся в <body>, но они должны быть в голове
dferraro

3
@dferraro: затем вам нужно добавить RenderSection("Scripts")в свой макет (например, заполнитель), а затем определить @section Scripts {}в представлении. В какой-то момент неизбежна модификация "мастера" (_layout). Вы не можете просто определить что-то в представлении и сказать ему «поместите это между <head>мной» (если вы не хотите попасть в сценарий, который добавляет сценарий)
Брэд Кристи

2
+1. Также @dferraro было бы лучше поместить ссылки на jQuery и RenderSection перед </body>, а не в голову вообще. Старое, но актуальное чтение: developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5
MikeSmithDev

1
Если вашего скрипта нет в Scriptsпапке, возможно, вам также потребуется разрешить доступ к нему: stackoverflow.com/questions/24763493/…
Гомер

12

Если вы используете механизм просмотра Razor, отредактируйте файл _Layout.cshtml. Переместите @ Scripts.Render ("~ / bundles / jquery"), присутствующий в нижнем колонтитуле, в раздел заголовка и напишите код javascript / jquery по своему усмотрению:

@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
    $(document).ready(function () {
        var divLength = $('div').length;
        alert(divLength);
    });
</script>

0

Вы можете добавить теги сценария, как мы используем в asp.net при выполнении проверки на стороне клиента, как показано ниже.

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
<script type="text/javascript" src="~/Scripts/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
    $(function () {
       //Your code
    });
</script>

для более свежих браузеров type="text/javascript"не требуется
Марк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.