【发布时间】:2012-04-06 18:39:04
【问题描述】:
在我看来,我正在使用 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 上。如果 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 中的确切 URL 在被传递回视图之前的格式为“http://www.foo.com/events”(没有尾部斜杠)。我还通过调试器验证了值在传递到@Html.Raw 之前没有改变。
【问题讨论】:
-
向我们展示您的实际代码。 Html.Raw 不做任何 Url 重新映射,所以它是别的东西在做。
-
@Mystere 指出,
Html.Raw不会操纵您的数据。请向我们展示post.Body的确切内容——也许将其写入文件,以便我们准确知道该数据是什么。 -
这有点奇怪。您如何在视图中设置“帖子”?那不应该是Model.Body吗?