Razor为超链接添加了额外的换行符和空格

时间:2014-12-01 20:41:00

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

我正在编写一个解析文本文件并用超链接替换行号的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)

1 个答案:

答案 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)