因此,我刚刚首次发布了一个网站,但遇到了一个问题。看起来_Layout.cshtml页面和视图相互冲突,因为它不会加载所有CSS和JS。我在控制台标签中看到一些错误:
” HTML1503:意外的开始标记, HTML1512:不匹配的结束标记, HTML1506:意外令牌。 “
当我转到发生错误的页面的源时,布局和视图页面被组合在一起,它在几秒钟的头部标记处给出了错误。第一个头标签来自布局页面,第二个头标签来自视图页面。因此,在一页中有2个head标签,这会产生冲突。
在发布之前我有什么想念的吗?因为在localhost上它运行正常,没有这些冲突。
希望有人可以帮助我,在此先感谢! :)
答案 0 :(得分:1)
我建议您使用Razor在布局页面上通读此MSDN article。
听起来您正在重复标题信息。
文章中
许多网站的内容都显示在每个页面上,例如 页眉和页脚,或一个告诉用户已登录的框。 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
的{{1}}部分意味着您不必在每个使用布局的视图中都包括“标题”部分。它是可选的。如果没有要求将其设置为false,则需要在使用该布局的每个页面上对其进行声明。
另一方面,请确保仅在以下位置之一声明您的css和javascript,如果要重复的话,最好是布局页面。但是,这并不意味着您不能同时拥有css和javascript。例如,如果您在项目中使用引导程序,则应将其包含在布局页面中,这样您就不会在整个视图中重复进行包含。但是,例如,您可以在视图中仅包含视图专用的javascript文件,而在布局中不包含该文件。