Mizanpajı kullanırken bir Görünüm içine komut dosyası src nasıl eklenir


102

Aşağıdaki gibi bir javascript referansı eklemek istiyorum:

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

Bir Razor View'um varsa, bunu Layout'a eklemek zorunda kalmadan dahil etmenin uygun yolu nedir (hepsine değil, yalnızca tek bir özel Görünümde ihtiyacım var)

Aspx'de içerik yer tutucuları kullanabilirdik .. Mvc'de aspx kullanan eski örnekler buldum ama Razor görünümünde bulamadım ..


1
Komut dosyası etiketini görünümünüze eklemeniz yeterlidir.
jrummell

1
Sadece komut dosyasını kendi görünümüme eklemek istiyorum, ancak oluşturulan sayfada kaynağı görüntülediğimde, komut dosyası etiketlerini <head> yerine html'nin <body> içine koyuyor?
dferraro

daha yeni tarayıcılar için type = "text / javascript" gerekli değildir
Mark Schultheiss

Yanıtlar:


175

Bunu nasıl uygulamak istediğinize bağlı olarak (komut dosyalarını istediğiniz belirli bir konum varsa) , yapıyı korurken görünümün kendisinden ek komut dosyaları eklemenizi sağlayacak bir @sectionkendi içinde uygulayabilirsiniz _Layout. Örneğin

_Yerleşim

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

Görünüm

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

Aksi takdirde, sahip olduğun şey iyidir. Çıktı alınan görünümle "satır içi" olmasını dert etmezseniz, <script>bildirimi görünümün içine yerleştirebilirsiniz.


3
BTW, bölümler aslında bahsettiğiniz içerik tutucularınızdır. Varsayılan MVC web projesine ve sayfaya nasıl başlık yerleştirdiklerine bakın.
Brad Christie

Teşekkürler. Aradığım buydu - ama bunu RenderSection olmadan yapmak mümkün mü? 'Sahip olduğun şey iyi' diyorsun - ama henüz hiçbir şeyim yok ... Komut dosyası referanslarını .cshtml'nin en üstüne koymayı denedim, ama sonuç referanslar <body> içinde ama olmalılar kafanın içinde olmak
dferraro

3
@dferraro: sonra RenderSection("Scripts")mizanpajınıza eklemeniz (bir yer tutucu gibi) ve ardından @section Scripts {}görünüm içinde bir tanımlamanız gerekir . Bir noktada "ana" (_layout) üzerinde bir değişiklik yapılması yakın. Bir görünüm içinde bir şeyi tanımlayıp ona " <head>benim için arasına yerleştir " diyemezsiniz (senaryo ekleyen bir senaryoya girmek istemiyorsanız)
Brad Christie

2
+1. Ayrıca @dferraro daha iyi bir şey, jQuery ve RenderSection'a referansları </body> 'den önce koymaktır, kafaya değil. Eski ama ilgili okuma: developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5
MikeSmithDev

1
Komut dosyanız Scriptsklasörde değilse, ona erişimi de etkinleştirmeniz gerekebilir: stackoverflow.com/questions/24763493/…
Homer

12

Razor görünüm motorunu kullanıyorsanız, _Layout.cshtml dosyasını düzenleyin. Altbilgide bulunan @ Scripts.Render'ı ("~ / bundles / jquery") başlık bölümüne taşıyın ve javascript / jquery kodunu istediğiniz gibi yazın:

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

1

Aşağıdaki gibi istemci tarafı doğrulamaları yaparken asp.net'te kullandığımız gibi betik etiketlerini ekleyebilirsiniz.

@{
    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>

daha yeni tarayıcılar type="text/javascript"için gerekli değildir
Mark Schultheiss
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.