11

我正在用 ASP.Net MVC4 开发一个应用程序,并且遇到了一个奇怪的空白问题。我用 Razor 开发了很多 MVC3 站点,没有这个问题。

这是我的模板 cshtml 文件:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>HF - Content Management - @ViewBag.Title</title>
    <link href="@Url.Content("~/content/bootstrap/bootstrap.min.css")" rel="stylesheet" />
    @Styles.Render("~/bundles/css/hf-cms-logged-in")
</head>
    <body>

        @Html.Partial("Partials/NavBar")

        <div class="container">@RenderBody()</div>

        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script src="@Url.Content("~/scripts/bootstrap/bootstrap.min.js")"></script>
        @Scripts.Render("~/bundles/js/validation")
        <script src="@Url.Content("~/scripts/hf-cms.js")"></script>
    </body>
</html>

注意 RenderBody() 调用的那一行——这里没有多余的空格。

当我调用一个动作时,渲染的主体会添加一些空格,我看不到我已经添加了这些空格,并且似乎无法摆脱。我调用一个没有逻辑的动作,它只返回以下视图:

@{
    ViewBag.Title = "Dashboard";
}    
<h1>Dashboard</h1>

它肯定使用了正确的模板(在我的 _ViewStart.cshtml 中指定)

在谷歌浏览器中查看页面,源显示额外的空白。见下图:

Google Chrome 开发者工具中显示的空格

在 IE10 中可以看到类似的问题。这显然影响了设计。我尝试使用Meleze.Web 去除任何额外的空白,但空白仍然存在。

我对这个感到茫然,因为到目前为止它是一个相对简单的网站,还没有什么时髦的东西,所以我看不出这个空白是从哪里来的。

以前有人用 MVC4 或 Razor 看过这个吗?

编辑:我尝试删除所有样式表和脚本文件,空白仍然存在。

4

7 回答 7

10

在为此苦苦挣扎了一段时间后,我找到了解决方案。

根 _ViewStart.cshtml 文件中一定有一个有趣的字符。我删除了 ViewStart 文件的内容并重新键入它,从而解决了问题。让我想到一个奇怪的角色可能导致了这个问题。

不喜欢回答我自己的问题,但我希望这对其他人有所帮助。理论上,这不会是 MVC4 特有的问题,您可能会在 MVC3 中遇到同样的问题。

于 2012-09-26T15:55:59.987 回答
5

我遇到了同样的问题,史蒂夫的回答让我走上了正轨,这可能是文件中嵌入的一个不寻常的字符。

就我而言,它原来是文件开头的重复 Unicode 字节顺序标记(0xEFBBBF)。当我从 Git Extensions 差异视图复制并粘贴文件内容时,它似乎已经潜入。

顺便说一句,Visual Studio 有一个内置的 Hex 查看器。如果您在解决方案资源管理器中右键单击文件并单击“打开方式...”,则可以选择“二进制编辑器”。

于 2014-04-28T23:21:26.100 回答
1

我一直遇到同样的问题,并尝试了你提出的方法,史蒂夫。然而,这并没有解决我的问题。我发现导致问题的原因是我的子页面顶部的 h2 标签:

<h2>@ViewData("Title")</h2>

当我删除包装标签时,一切正常:

@ViewData

作为测试,我采用了 h2 的样式并将它们放在自己的类中,然后用跨度包装我的页面标题内容:

<span class="pagetitle">@ViewData("Title")</span>

这工作得很好,所以我是如何纠正我的网站的问题的。虽然我不知道真正的根本原因,但这确实解决了我的问题,所以也许它会帮助其他人。

于 2013-05-16T15:04:14.933 回答
1

我刚刚遇到了类似的问题 - 在我的情况下,视图顶部的 @using 指令之一导致了问题。我在项目的几个不同视图中发现了同样的事情。

帮助我找到违规字符的一件事是将整个视图的内容粘贴到记事本中——很明显,有问题的行以某种方式编码不同(它们看起来比其他行小,即使在记事本中也是如此)。删除这些行并从头开始重写它们解决了这个问题,尽管我很遗憾我一开始是如何进入那个位置的......

于 2014-05-12T12:22:50.560 回答
0

我遇到了同样的问题,感谢这里的线索,我能够确定问题所在。

经过大量调查后,我发现页面开头有一个 Unicode 字符“零宽度不间断空格”。此字符在保存/编码为“带有 BOM 的 UTF-8”时添加到页面。我只能猜测该页面是在 Visual Studio 之外编辑的,是从其他地方复制的,或者可能是 VS 中的页面编码设置不正确。您在其他答案中说过,您可以通过查看曾经复制并粘贴到记事本中的内容来查看它。

于 2014-06-10T18:40:06.220 回答
0

我遇到了同样的问题,我将其修复如下: - 将数据库中的列(字段)数据类型从 nchar 更改为 nvarchar。这是因为 nchar 保留固定长度,因此如果您的字符串短于该长度,它将用空格完成。

于 2017-03-26T12:46:37.807 回答
0

我有一个类似的问题,但一个更明显的解决方案。我在方法调用之后Html.Partial()包含在我的<head>元素中。;再次呈现在正文中。

<head>
    @await Html.PartialAsync("Test"); // The ";" is rendered in the body, remove it!
</head>
<body>
   ...
</body>
于 2018-06-06T00:12:55.157 回答