ASP.NET MVC3 Html.Raw更改绝对URL?

时间:2012-04-06 18:39:05

标签: asp.net-mvc-3 html-helper

我在视图中使用ASP.NET MVC 3和帮助程序@ Html.Raw。

我正在传递一些我存储在数据库中的HTML标记。标记包含一些指向我网站上其他位置的URL。例如http://www.foo.fom/events。这些数据是论坛帖子,因此他们显示的页面的格式为http://www.foo.com/forums/thread/42/slug

但是,在呈现页面时,保存的URL将以修改后的形式呈现为:

http://www.foo.com/forums/thread/42/events/

这仅适用于我网站上的网址。如果URL指向某个外部站点,则不会更改。

我已经确认我传入@ Html.Raw的是正确的URL(http://www.foo.com/events)。为什么在呈现页面时它会被更改?是否有一种简单的方法可以禁用此“功能”?

这是我显示标记的代码:

<div>
        @Html.Raw(post.Body)
</div>

这里是生成页面数据的控制器代码:

var post = _forumRepository.GetPostById(id)

var model = new ForumPostView()
{
    Body = post.Body,
    PostDate = post.DatePosted,
    PostedBy = post.Author,
    PostId = post.Id
};

return View(model);

我已经通过调试器验证了post.Body中传递回View之前的确切URL是“http://www.foo.com/events”形式(没有尾部斜杠)。我还通过调试器验证了值在传递到@ Html.Raw之前没有改变。

2 个答案:

答案 0 :(得分:1)

听起来指向您网站上其他网页的网址是非绝对的。您是某些,他们是从/还是http开始的?如果没有,它的行为与它的假设完全相同,并将它们视为相对URL - 从而将它们附加到当前URL。

Html.Raw不会操纵字符串,所以这里没有错误)

此外,向我们展示您的代码并不会有什么坏处。

答案 1 :(得分:1)

不,其实我是个白痴。 URL确实以相对形式存储而没有前导/,这就是为什么它们最终与当前页面相关。显示的文本是绝对的,这是我在查看数据库时看到的内容。这就是我在几个小时内进行调试的原因&#39;睡觉;)