cách thêm script src bên trong View khi sử dụng Layout


99

Tôi muốn bao gồm một tham chiếu javascript như:

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

Nếu tôi có Chế độ xem dao cạo, thì cách thích hợp để bao gồm cái này mà không cần phải thêm nó vào Bố cục là gì (tôi chỉ cần nó trong một Chế độ xem cụ thể, không phải tất cả chúng)

Trong aspx, chúng tôi có thể sử dụng trình giữ chỗ nội dung .. Tôi đã tìm thấy các ví dụ cũ hơn sử dụng aspx trong mvc nhưng không sử dụng chế độ xem Razor ..


1
Chỉ cần thêm thẻ script vào chế độ xem của bạn.
jrummell

1
Tôi chỉ muốn thêm tập lệnh vào chế độ xem của mình, nhưng khi tôi xem mã nguồn trên trang được tạo, nó đặt các thẻ tập lệnh bên trong <body> của html thay vì <head>?
dferraro

đối với các trình duyệt gần đây hơn, type = "text / javascript" là không cần thiết
Mark Schultheiss

Câu trả lời:


169

Tùy thuộc vào cách bạn muốn triển khai nó (nếu có một vị trí cụ thể mà bạn muốn các tập lệnh), bạn có thể triển khai một @sectionbên trong của mình _Layout, điều này sẽ cho phép bạn thêm các tập lệnh bổ sung từ chính khung nhìn, trong khi vẫn giữ nguyên cấu trúc. ví dụ

_Bố trí

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

Lượt xem

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

Nếu không, những gì bạn có là tốt. Nếu bạn không ngại nó "nội tuyến" với dạng xem được xuất ra, bạn có thể đặt <script>khai báo trong dạng xem.


3
BTW, các phần về cơ bản là những người giữ nội dung mà bạn đã đề cập đến. Xem dự án web MVC mặc định và cách họ đặt tiêu đề trên trang.
Brad Christie

cảm ơn. Đây là những gì tôi đang tìm kiếm - nhưng liệu có thể làm điều này mà không có RenderSection không? Bạn nói 'những gì bạn có đều ổn' - nhưng tôi chưa có gì cả ... Tôi đã thử đặt các tham chiếu tập lệnh ở đầu .cshtml, nhưng kết quả là các tham chiếu nằm trong <body> nhưng chúng nên được trong đầu
dferraro

3
@dferraro: sau đó bạn cần thêm RenderSection("Scripts")vào bố cục của mình (giống như bạn làm với trình giữ chỗ) và sau đó xác định một @section Scripts {}trong dạng xem. Tại một số điểm sắp xảy ra sửa đổi đối với "master" (_layout). Bạn không thể chỉ xác định một cái gì đó trong một cái nhìn và nói với nó "đặt nó giữa <head>cho tôi" (trừ khi bạn muốn nhận được vào một kịch bản có thêm một kịch bản)
Brad Christie

2
+1. Ngoài ra @dferraro, một điều tốt hơn sẽ là đặt các tham chiếu đến jQuery và RenderSection trước </body> và hoàn toàn không ở trong đầu. Bài đọc cũ nhưng có liên quan: developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_5
MikeSmithDev

1
Nếu tập lệnh của bạn không có trong Scriptsthư mục thì bạn cũng có thể cần bật quyền truy cập vào nó: stackoverflow.com/questions/24763493/…
Homer

12

Nếu bạn đang sử dụng công cụ xem Razor thì hãy chỉnh sửa tệp _Layout.cshtml. Di chuyển @ Scripts.Render ("~ / Bundles / jquery") có trong chân trang đến phần đầu trang và viết mã javascript / jquery như bạn muốn:

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

0

Bạn có thể thêm các thẻ script như cách chúng tôi sử dụng trong asp.net khi thực hiện xác nhận phía máy khách như bên dưới.

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

cho các trình duyệt gần đây hơn type="text/javascript"là không cần thiết
Đánh dấu Schultheiss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.