我正在编写一个 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 菜鸟,所以非常感谢任何帮助。谢谢你的时间。
附言我把应该超链接的文本放在括号内。超链接功能不能很好地转移到堆栈溢出。
编辑:这是要求的来源
--------
Summary
--------
Version 23.00.00.00
Error 007 2 at lines (09/02/2014-06:13:32.607, <a href="C:UsersGBALLprojectproject_folderwebsiteHomeUploadFiles~/App_Data/Uploads/bloop.txt">5662</a>
);
Timeouts 0
Reboots 1 at lines (09/ <a href="C:UsersGBALLprojectproject_folderwebsiteHomeUploadFiles~/App_Data/Uploads/bloop.txt">2</a>
/2014-06:12:59.900, 2)
浏览器在呈现 HTML 时始终忽略空格。这就是<pre>
元素存在的原因。它的唯一功能是告诉浏览器在渲染时实际考虑空格。但是,这是一个非此即彼的命题:要么你看到空格,所有的空格,要么你看不到。 这意味着,如果您要使用预先格式化的块,则需要注意 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)