我正在编写一个解析文本文件并用超链接替换行号的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]
)
当超链接打印为普通字符串时,我的解析器工作正常,因此看起来剃刀在每个超链接之前添加额外的空白区域,并在每个超链接之后添加额外的换行符。以下是视图中的代码:
<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,所以非常感谢任何帮助。谢谢你的时间。
P.S。我把应该是超链接的文本放在括号内。超链接功能没有很好地完成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)
答案 0 :(得分:1)
浏览器在呈现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)