Các phần sau đã được xác định nhưng chưa được hiển thị cho trang bố cục “~ / Views / Shared / _Layout.cshtml”: “Scripts”


100

Tôi mới sử dụng ASP MVC và đang sử dụng Hướng dẫn giới thiệu về ASP MVC 4 Beta http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet -mvc-4

Tôi đang gặp một lỗi mà dường như tôi không thể tìm ra câu trả lời cũng như không có nhiều kinh nghiệm lập trình nên tôi không biết bắt đầu từ đâu để khắc phục lỗi này khi chuyển sang hướng dẫn. Tôi đánh giá cao bất kỳ sự giúp đỡ nào bạn có thể cung cấp.

Tôi đang ở phần Truy cập dữ liệu mô hình của bạn từ bộ điều khiển và tôi gặp lỗi này khi cố gắng tạo Phim như một phần của hướng dẫn, tôi nhấp vào liên kết "Tạo mới" và tôi gặp lỗi sau

Các phần sau đã được xác định nhưng chưa được hiển thị cho trang bố cục> "~ / Views / Shared / _Layout.cshtml": "Scripts"

Thay vì sử dụng Visual Studio express, tôi đã chọn tải xuống Visual Studio 2012 RC (không chắc đó có phải là nguyên nhân gốc rễ gây ra sự cố của tôi hay không.

Tôi nhận ra rằng bạn có thể yêu cầu tôi bao gồm mã để trả lời điều này nhưng tôi không chắc chắn nên bao gồm mã nào. Vui lòng cho tôi biết mã nào bạn cần tôi đưa vào nếu có và tôi sẽ sẵn lòng thêm nó vào câu hỏi của mình.

Cảm ơn bạn,


Bạn nên làm theo các Visual Studio 2012 phiên bản mà hướng dẫn asp.net/mvc/tutorials/mvc-4/...
RickAndMSFT

1
tôi gặp vấn đề tương tự và vấn đề của tôi đã được giải quyết khi tôi lấy RenderSection ra khỏi @ {} và chỉ sử dụng @. Không hiểu tại sao điều này lại xảy ra
Guilherme Ferreira

1
Liên kết trong RickA và bình luận ở trên không hoạt động đối với tôi. Nhưng quan trọng hơn, đây không phải là vấn đề hướng dẫn, đó là vấn đề tạo mã VS có thể dễ dàng khắc phục và không nên chỉ ghi lại bằng cách xóa dòng không thành công như nhiều câu trả lời bên dưới câu được chấp nhận đề xuất. Xem câu trả lời của tôi ( stackoverflow.com/a/27152625/165164 ) bên dưới để thảo luận về những gì đang thực sự xảy ra - ít nhất là đối với một số phiên bản của VS.
Anne Gunn

Lỗi đã nêu được tạo ra khi một dạng xem đã xác định một dạng @sectionKHÔNG được hiển thị trong Bố cục (với RenderSection). Điều này có thể xảy ra nếu bạn tham chiếu sai Layouthoặc quên tham chiếu một bố cục nào đó. Xem câu trả lời của @ vonv
StuartLC

Câu trả lời:


144

Có nghĩa là bạn đã xác định một phần trong Layout.cshtml chính của mình, nhưng bạn chưa bao gồm bất kỳ thứ gì cho phần đó trong Chế độ xem của mình.

Nếu _Layout.cshtml của bạn có nội dung như sau:

@RenderSection("scripts")

Sau đó, tất cả Chế độ xem sử dụng Bố cục đó phải bao gồm một @sectiontên giống nhau (ngay cả khi nội dung của phần trống):

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

Thay vào đó, bạn có thể đặt bắt buộc thành sai, sau đó bạn sẽ không bắt buộc phải thêm phần vào mỗi Chế độ xem,

@RenderSection("scripts", required: false)

hoặc bạn cũng có thể bọc @RenderSectiontrong một ifkhối,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

7
Câu trả lời của bạn rất hữu ích. Tôi không xác định được bất kỳ @RenderSection ("Tập lệnh") nào trong _Layout.cshtml nhưng tôi đã nhận thấy trong các chế độ xem được tạo tự động khi tạo trình điều khiển Phim của tôi cho hướng dẫn này, rằng các chế độ xem đó có @section Scripts {@ Scripts.Render (" ~ / Bundles / jqueryval ")} Vì vậy, tôi đã xóa chúng vào lúc này và mọi thứ hiện đang hoạt động.
Kevin Dark

23
trong khi câu trả lời của bạn là tốt. Tôi nghĩ bạn nên chỉ ra rằng thêm , required: false)việc tạo ra nó @RenderSection("scripts", required: false)sẽ cho phép nó được đưa vào hay không.
Eonasdan 27/09/12

3
@ KDark11 Khi tạo khung nhìn, VS hỏi bạn có muốn tham chiếu đến các tập lệnh hay không. Chỉ cần bỏ đánh dấu đó.
Eonasdan

1
Tôi đồng ý rằng việc đưa @RenderSection("scripts", required: false)vào _Layout.cshtml đã tạo là giải pháp phù hợp. (Xem thảo luận bên dưới để biết lý do.) Bằng cách đó, bạn có thể thêm bản sửa lỗi vào một tệp, không phải tất cả - một bản sửa lỗi KHÔ hơn nhiều.
Anne Gunn

@Eonasdan wow thật tuyệt vời! khi nào họ thêm tính năng đó? làm ơn đừng nói với tôi v1.0: - /
Simon_Weaver

25

Ngoài ra, bạn có thể thêm dòng sau vào _Layout.cshtmlhoặc _Layout.Mobile.cshtml:

@RenderSection("scripts", required: false)

24

Tôi gặp trường hợp có 3 cấp a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Mặc dù làm như thế này:

_MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_Middle.cshtml

@section head {
    @RenderSection("head")
}

và trong định nghĩa Page.cshtml

@section head {
   ***content***
}

Tôi vẫn sẽ nhận được lỗi

Các phần sau đã được xác định nhưng chưa được hiển thị cho trang bố cục “~ / Views / Shared / _Middle.cshtml”: "head".

Hóa ra, lỗi là do Middle.cshtml dựa vào /Views/_ViewStart.cshtml để giải quyết bố cục mẹ của nó. Sự cố đã được giải quyết bằng cách xác định điều này trong Middle.cshtml một cách rõ ràng:

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

Không thể quyết định đây là do thiết kế riêng hay lỗi trong MVC 4 - dù sao thì vấn đề đã được giải quyết :)


Tôi đang gặp vấn đề tương tự. Vấn đề là tôi đang gọi RenderSection trước RenderBody và bên trong Nội dung cơ thể, tôi đang xác định phần. Nó có thể là?
Guilherme Ferreira

Hôm nay tôi đã học được cách làm "bố cục giữa" nhờ mã mẫu ở đây. @section Foo {@RenderSection("Foo")}để "truyền" các phần! Cũng phải truyền vào cơ thể với @RenderBody().
starlocke,

11

Tôi không chắc tại sao câu trả lời được chấp nhận lại được chấp nhận nếu giải pháp được đề xuất không và không giải quyết được vấn đề. Thực tế có thể có hai vấn đề liên quan liên quan đến chủ đề này.

Vấn đề số 1

Trang chủ (ví dụ _Layout.cshtml) có một phần được xác định và nó là bắt buộc nhưng các dạng xem kế thừa đã không triển khai nó. Ví dụ,

Mẫu bố cục

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

Chế độ xem kế thừa

Không cần hiển thị bất kỳ mã nào, chỉ cần xem xét rằng không có triển khai @section OptionBox {}trên chế độ xem.

Lỗi đối với vấn đề số 1

Section not defined: "OptionBox ".

Vấn đề 2

Trang chủ (ví dụ _Layout.cshtml) có một phần được xác định và nó được yêu cầu VÀ chế độ xem kế thừa đã thực hiện nó. Tuy nhiên, dạng xem triển khai có các scriptphần bổ sung không được xác định trên (bất kỳ) trang chính nào của nó.

Mẫu bố cục

same as above

Chế độ xem kế thừa

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

Lỗi đối với vấn đề số 2

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

Vấn đề của OP tương tự như Vấn đề số 2 và câu trả lời được chấp nhận là cho Vấn đề số 1.


3
Đồng ý, nhận xét của OP là anh ta đã xóa một phần trong chế độ xem để giải quyết lỗi, có nghĩa là anh ta đã xác định một phần trong chế độ xem, nhưng không có trong bố cục, không phải ngược lại như hầu hết các địa chỉ câu trả lời (Vấn đề số 2 tương ứng với lỗi mà họ mô tả) Tất cả các câu trả lời khác đang mô tả một tình huống sẽ không tạo ra lỗi đó, nhưng thay vào đó "Phần không được xác định" chứ không phải "Phần đã được xác định nhưng ... không được hiển thị".
AaronLS

8

Tôi nghĩ rằng giải pháp của chúng tôi đủ khác biệt so với mọi người nên tôi sẽ ghi lại nó ở đây.

Chúng tôi đã thiết lập bố cục chính, bố cục trung gian và sau đó là kết xuất trang hành động cuối cùng. Main.cshtml <- Config.cshtml <- Action.cshtml

Chỉ khi web.config customErrors='On/RemoteOnly'chúng tôi gặp lỗi tùy chỉnh và không có ngoại lệ cũng như không Application_Errorđược gọi. Tôi có thể thấy điều này Layout = nulltrực tuyến trong Error.cshtml. Ngoại lệ như trong câu hỏi, thiếu phần tập lệnh.

Chúng tôi đã định nghĩa nó trong Main.cshtml (với Required: false) và Action.cshtml không có bất kỳ thứ gì được viết vào phần script.

Giải pháp là thêm @section scripts { @RenderSection("scripts", false) }vào Config.cshtml.


7

Về cơ bản, nó xảy ra khi _Layout.cshtml không có:

@RenderSection("scripts", required: false)

Hoặc với

@RenderSection("scripts")  

KHÔNG CÓ

required: false

Vì vậy, chỉ cần thêm @RenderSection ("scripts", bắt buộc: false) trong _Layout.cshtml và nó hoạt động đặc biệt cho những nhà phát triển làm việc với các dự án có địa chỉ của Kendoui .


7

Có vẻ như có sự không khớp giữa các tệp Xem mà một số phiên bản của Visual Studio tự động tạo cho bạn khi bạn sử dụng nó để tạo một Mô hình mới. Tôi đã gặp sự cố này khi sử dụng Phiên bản Cộng đồng VS 2013 mới và xem qua hướng dẫn của W3Schools tại http://www.w3schools.com/aspnet/mvc_app.asp nhưng các nhận xét ở trên cho thấy rằng đó không phải là vấn đề với các hướng dẫn hoặc với phiên bản duy nhất của VS.

Đúng là bạn có thể làm cho thông báo lỗi biến mất bằng cách xóa

@Scripts.Render("~/bundles/jqueryval")

từ các bố cục tạo / chỉnh sửa đã được Visual Studio tạo tự động.

Nhưng giải pháp đó không giải quyết được nguyên nhân gốc rễ hoặc giúp bạn không có cơ hội để làm nhiều việc hơn là hoàn thành hướng dẫn. Tại một số thời điểm (có thể là khá sớm) trong quá trình phát triển ứng dụng thực, bạn sẽ muốn truy cập vào mã xác thực jquery mà giải pháp đưa ra bình luận loại bỏ khỏi ứng dụng của bạn.

Nếu bạn sử dụng VS để tạo một mô hình mới cho bạn, nó cũng tạo một bộ năm tệp Chế độ xem: Tạo, Xóa, Chi tiết, Chỉnh sửa và Chỉ mục. Hai trong số các dạng xem này, Tạo và Chỉnh sửa nhằm cho phép người dùng thêm / sửa dữ liệu cho các trường trong bản ghi cơ sở dữ liệu làm nền tảng cho mô hình. Đối với những chế độ xem đó trong một ứng dụng thực, có thể bạn sẽ muốn thực hiện một số xác thực dữ liệu bằng cách sử dụng thư viện xác thực jquery trước khi lưu bản ghi trong db. Đó là lý do tại sao VS thêm các dòng sau

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

ở dưới cùng của hai chế độ xem đó và không phải những người khác. Mã được tạo tự động đang cố gắng cung cấp thư viện xác thực cho các chế độ xem đó, chứ không phải các chế độ xem khác.

Lỗi xảy ra vì VS không thêm một dòng tương ứng vào tệp _Layout.cshtml được chia sẻ hoặc, xem một câu trả lời ở trên, thêm câu trả lời nhưng bỏ qua nhận xét. Dòng này là

@RenderSection("scripts", required: false)

Nếu một số dạng xem của bạn có phần tập lệnh (như Tạo và Chỉnh sửa), thì phải có lệnh RenderSection được nhúng trong bố cục. Nếu một số tập lệnh có phần và một số không có (như Xóa, Chi tiết và Chỉ mục không có), lệnh RenderSection phải có required: falsetham số.

Vì vậy, giải pháp tốt nhất, nếu bạn muốn làm bất cứ điều gì khác ngoài việc hoàn thành hướng dẫn, là thêm câu lệnh vào _Layout.cshtml, không xóa mã khỏi chế độ xem Chỉnh sửa và Tạo.

PS Có một chút nhầm lẫn, ở đây, những gì đang được yêu cầu nằm trong một 'gói' và câu lệnh request có vẻ như nó đang cố gắng đưa một tệp vào một thư mục bó không tồn tại trong dự án của bạn. Tuy nhiên, đối với các bản dựng và hướng dẫn gỡ lỗi, điều đó không liên quan vì các tệp đi kèm được đưa vào từng tệp một. Hãy xem: http://www.asp.net/mvc/overview/performance/bundling-and-minification Đoạn mã đang được đề cập ở đây được đề cập ngắn gọn khoảng hai phần ba trang.


Điều này "đá" và là một lời giải thích thực sự tốt. Có lẽ nó đã ở sau để không nhận được nhiều phiếu ....
JosephDoggie

2

Trong khi làm việc qua Hướng dẫn ASP.NET MVC 4 với Visual Studio 2012, tôi đã gặp phải lỗi tương tự trong phần "Truy cập dữ liệu mô hình của bạn từ phần điều khiển". Cách khắc phục khá đơn giản.

Khi tạo Ứng dụng Web ASP.NET MVC 4 mới trong Visual Studio 2012 trong tài liệu _Layout.cshtml trong thư mục chia sẻ, phần "tập lệnh" được nhận xét.

    @*@RenderSection("scripts", required: false)*@

Chỉ cần bỏ nhận xét dòng và mã mẫu sẽ hoạt động.

    @RenderSection("scripts", required: false)

1

Tôi gặp vấn đề tương tự khi triển khai hướng dẫn cho người mới bắt đầu sử dụng MVC. Tôi đã nhận được nhiều đề xuất khác nhau để sửa đổi @RenderSection trong tệp layout.cshtml của bạn nhưng tôi không sử dụng nó.

Tôi đã tìm kiếm rất nhiều và sau đó tôi thấy rằng thẻ script được tạo trong (View / Edit.cshtml) và tệp cshtml khác không hiển thị

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

Vì vậy, tôi đã loại bỏ những dòng đó và ứng dụng bắt đầu chạy trơn tru.



0

Tôi đã tìm kiếm lỗi trên web và đến trang này. Tôi đang sử dụng Visual Studio 2015 và đây là dự án MVC đầu tiên của tôi.

Nếu bạn bỏ lỡ ký hiệu @ trước phần kết xuất, bạn sẽ gặp lỗi tương tự. Tôi muốn chia sẻ điều này cho những người mới bắt đầu trong tương lai.

 @RenderSection("headscripts", required: false)

0

Tôi có cảm giác rằng bạn đang hiển thị phần của mình từ bên trong phần @ trong tệp _Layout đang đề cập đến chế độ xem một phần với phần @, tức là bạn đã lồng một phần @ vào phần @. Trong tệp _Layout, hãy xóa phần @ xung quanh phần hiển thị.


0

Tôi đã giải quyết vấn đề này bằng cách sử dụng cách sau,

@await Html.PartialAsync("_ValidationScriptsPartial")

0

Đối với tôi, vấn đề là trong _Layout.cshtml của tôi, Tôi có RenderSection bên trong một điều kiện

 @if (theme == "Red" || theme == "Green")
  {
       <div>
       @RenderSection("Footer", false)
       </div>
   }

và trong quan điểm của con tôi, nó không có điều kiện

@section Footer{
        <div>
            @Html.AwButton("Reject", "Reject")
            @Html.AwSubmit("Ok", "Ok")
        </div>
    }

vì vậy, bất kể chủ đề là gì, con đã thêm Chân trang. Nhưng trong cha mẹ khi chủ đề không phải là Đỏ hoặc Xanh lục, nó không thêm Chân trang và ngoại lệ không được xử lý được ném ra.


-1

kiểm tra cách viết và chữ hoa trên / dưới của thuật ngữ ""

khi nào chúng tôi viết @RenderSection ("name", bắt buộc: false), hãy đảm bảo rằng chế độ xem dao cạo Chứa tên phần @section {}, vì vậy hãy kiểm tra cách viết và viết hoa chữ thường / chữ thường của thuật ngữ "" Đúng trong trường hợp này là "Tập lệnh"


-1

Hãy đảm bảo rằng bạn đã gõ đúng chính tả của phần sử dụng tập lệnh trong chế độ xem

chính xác là

@section scripts{ //your script here}

nếu bạn gõ, @section script{ //your script here}điều này là sai.

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.