Як додати скрипт src всередині подання при використанні макета


100

Я хочу включити посилання на javascript, наприклад:

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

Якщо у мене є Razor View, який правильний спосіб включити це без необхідності додавати його до макета (він потрібен лише в одному конкретному поданні, не у всіх)

В aspx ми могли б використовувати власники місця вмісту .. Я знайшов старіші приклади використання aspx у mvc, але не в режимі Razor ..


1
Просто додайте тег сценарію до свого перегляду.
jrummell

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

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

Відповіді:


170

Залежно від того, як ви хочете його реалізувати (якщо в конкретному місці вам потрібні сценарії), ви можете реалізувати @sectionвсередині вашого, _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")до свого макета (як би заповнювач), а потім визначити a @section Scripts {}у поданні. У якийсь момент неминуча модифікація "master" (_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"не потрібен
Mark
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.