我在视图中使用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之前没有改变。
答案 0 :(得分:1)
听起来指向您网站上其他网页的网址是非绝对的。您是某些,他们是从/
还是http
开始的?如果没有,它的行为与它的假设完全相同,并将它们视为相对URL - 从而将它们附加到当前URL。
(Html.Raw
不会操纵字符串,所以这里没有错误)
此外,向我们展示您的代码并不会有什么坏处。
答案 1 :(得分:1)
不,其实我是个白痴。 URL确实以相对形式存储而没有前导/,这就是为什么它们最终与当前页面相关。显示的文本是绝对的,这是我在查看数据库时看到的内容。这就是我在几个小时内进行调试的原因&#39;睡觉;)