Макет страницы и конфликты просмотров MVC5 - PullRequest
0 голосов
/ 31 октября 2018

Итак, я только что опубликовал веб-сайт впервые, и у меня возникла проблема. Похоже, что страница _Layout.cshtml и представления конфликтуют друг с другом, потому что она не загружает все CSS и JS. Я получаю несколько ошибок на вкладке консоли, которая говорит:

» HTML1503: неожиданный начальный тег, HTML1512: несоответствующий конечный тег, HTML1506: неожиданный токен. «

Когда я перехожу к источнику страницы, где происходит ошибка, компоновка и страница просмотра объединяются вместе, это выдает ошибку в тегах head секунд. Первый первый тег заголовка - это тег страницы макета, а второй - заголовок страницы просмотра. Таким образом, наличие 2 тегов заголовка на 1 странице, и это конфликтует.

Есть что-то, что я пропустил перед публикацией? Потому что на localhost он работает без этих конфликтов.

Надеюсь, кто-нибудь может мне помочь, заранее спасибо! :)

1 Ответ

0 голосов
/ 31 октября 2018

Я рекомендую вам прочитать эту статью MSDN на страницах макетов с использованием Razor.

Похоже, вы повторяете информацию заголовка.

Из статьи

Многие веб-сайты имеют контент, который отображается на каждой странице, например верхний и нижний колонтитулы или поле, сообщающее пользователям, что они вошли в систему. ASP.NET позволяет создавать отдельный файл с блоком контента, который может содержит текст, разметку и код, как обычная веб-страница. Вы можете затем вставьте блок контента в другие страницы на сайте, где вы хочу, чтобы информация появилась. Таким образом, вам не нужно копировать и вставьте одинаковое содержимое на каждую страницу.

Другими словами, на странице макета есть вся разметка, которую вы хотите повторить на каждой странице. Таким образом, вам не нужно повторять это вручную.

Страница содержимого может иметь несколько разделов, что полезно, если вы хотите использовать макеты, которые имеют несколько областей со сменным контентом. В страница содержания, вы даете каждому разделу уникальное имя. (По умолчанию раздел остается без имени.) На странице макета вы добавляете RenderBody метод, чтобы указать, где должен появиться безымянный (по умолчанию) раздел. Затем вы добавляете отдельные методы RenderSection для визуализации именованных разделы индивидуально.

Поскольку каждая страница может иметь несколько разделов, вы можете использовать метод RenderSection, чтобы дифференцировать их в макете.

Вот пример из статьи:

<!DOCTYPE html>
<html>
  <head>
    <title>Multisection Content</title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id="header">
      <div>This content will repeat on every view that uses this layout.</div>
      @RenderSection("header", required: false)
    </div>
    <div id="main">
      @RenderBody()
    </div>
  </body>
</html>

Как видите, любая информация заголовка будет загружена с использованием метода RenderSection. По вашему мнению, вы должны определить этот раздел, используя код, подобный следующему:

@section header {
  <div>
    This content will only repeat on the page that it is declared in.
  </div>
}

Итак, когда вы запустите его, вы получите:

<!DOCTYPE html>
<html>
  <head>
    <title>Multisection Content</title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id="header">
      <div>This content will repeat on every view that uses this layout.</div>
      <div>
         This content will only repeat on the page that it is declared in.
      </div>
    </div>
    <div id="main">
      ...
    </div>
  </body>
</html>

required:false часть @RenderSection("header", required: false) означает, что вам не нужно включать «заголовок» раздела в каждое представление, использующее макет. Это необязательно. Если вы не указали значение false, вам потребуется объявить его на каждой странице, использующей макет.

В добавлении к сведению убедитесь, что вы объявляете свои CSS и JavaScript только в одном из этих мест, предпочтительно на странице макета, если это будет повторяться. Это не означает, однако, что вы не можете иметь CSS и JavaScript в обоих. Например, если вы используете загрузчик в своем проекте, вы бы включили его в свою страницу макета, чтобы не повторять включение во все виды. Но вы можете, например, включить определенный файл javascript вида только в свой вид, а не в макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...