【问题标题】:Razor adding extra newline character and white spaces to hyperlinksRazor 向超链接添加额外的换行符和空格
【发布时间】:2014-12-01 20:40:59
【问题描述】:

我正在编写一个 Web 应用程序,它解析文本文件并用超链接替换行号,以便用户可以轻松导航到他们输入的文本文件的特定行号。

我正在打印存储在 .cshtml 视图中的 Viewbag 中的对象列表。当我将所有内容打印为普通文本时,一切看起来都很好。例如:

--------
Summary
--------
Version             23.00.00.00
Error 007           2   at lines    (09/02/2014-06:13:32.607, 5662);
Timeouts            0
Reboots             1   at lines    (09/02/2014-06:12:59.900, 2)

但是当我将行号打印为超链接时,会发生这种情况:

--------
Summary
--------
Version             23.00.00.00
Error 007           2   at lines    (09/02/2014-06:13:32.607,                [5662]
);
Timeouts            0
Reboots             1   at lines    (09/02/2014-06:12:59.900,                [2]
)

当超链接作为普通字符串打印时,我的解析器工作得很好,所以看起来 razor 在每个超链接之前添加了额外的空格,在每个超链接之后添加了额外的换行符。这是视图中的代码:

<pre>     
        @for (int i = 0; i < ViewBag.links.Count; i++)
        { 
            if (ViewBag.links[i].isHyperLink == true)
            {
                <a href="@ViewBag.links[i].url">@ViewBag.links[i].text</a> //hyperlink printed
            }  
            if (ViewBag.links[i].isHyperLink == false)
            {
                @ViewBag.links[i].text; //normal text printed
            }
        }
</pre>

我是 asp.net/razor noob,所以非常感谢任何帮助。感谢您的宝贵时间。

附:我已将应该超链接的文本放在括号内。超链接功能没有很好地延续到 stackoverflow。

编辑:这是所要求的来源

--------
Summary
--------
Version             23.00.00.00
Error 007           2   at lines    (09/02/2014-06:13:32.607,                <a href="C:\Users\GBALL\project\project_folder\website\Home\UploadFiles~/App_Data/Uploads/bloop.txt">5662</a>
); 
Timeouts                0
Reboots             1   at lines    (09/                <a href="C:\Users\GBALL\project\project_folder\website\Home\UploadFiles~/App_Data/Uploads/bloop.txt">2</a>
/2014-06:12:59.900, 2)

【问题讨论】:

  • 您能否发布生成的 HTML,以便我们查看解析和渲染后的样子?
  • 我发布的前两个块是生成的 html。唯一的区别是第二个块有括号数字而不是实际的超链接。除此之外,它们与生成的 html 相同。
  • 好的,所以在生成的html中,除了id值之外,是否有其他文本或字符被添加到超链接文本中?
  • 不,您发布的前两个块是 HTML 在浏览器中的表示。查看源并发布实际生成源。
  • 您将链接包装在&lt;pre&gt; 中,这意味着将保留所有空格和换行符,包括链接之前的制表符/空格和链接之后的换行符。有什么理由使用&lt;pre&gt; 而不是常规的&lt;div&gt;&lt;span&gt;

标签: asp.net-mvc asp.net-mvc-4 razor hyperlink


【解决方案1】:

浏览器在呈现 HTML 时总是忽略空格。这就是存在&lt;pre&gt; 元素的原因。它的唯一功能是告诉浏览器在渲染时实际考虑空白。然而,这是一个非此即彼的命题:要么你看到空白,所有的空白,要么你没有。这意味着如果您要使用预先格式化的块,那么您需要注意 Razor 代码中的空格。您可以执行以下操作:

@for (int i = 0; i < ViewBag.links.Count; i++)
{ 
    if (ViewBag.links[i].isHyperLink == true)
    {<a href="@ViewBag.links[i].url">@ViewBag.links[i].text</a>}  
    else
    {@ViewBag.links[i].text}
}

请注意代码括号是如何折叠在文本周围的,因此不存在空格。或者,最好是,因为上面的内容非常难看,所以使用像三元这样的东西:

@Html.Raw(ViewBag.links[i].isHyperLink == true
    ? string.Format("<a href='{0}'>{1}</a>", ViewBag.links[i].url, ViewBag.links[i].text)
    : ViewBag.links[i].text) 

【讨论】: