【问题标题】:ASP.NET MVC3 Html.Raw changing absolute URLs?ASP.NET MVC3 Html.Raw 更改绝对 URL?
【发布时间】: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吗?

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


【解决方案1】:

听起来指向您网站上其他页面的 url 不是绝对的。您确定它们以/http 开头吗?如果不是,它的行为与预期完全一样,并将它们视为相对 url - 从而将它们附加到当前 url。

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

此外,向我们展示您的代码也无妨。

【讨论】:

    【解决方案2】:

    不,事实上我是个白痴。这些 URL 确实是以相对形式存储的,没有前导 /,这就是它们最终与当前页面相关的原因。显示的文本是绝对的,这是我在查看 db 时看到的。这就是我在几个小时的睡眠中调试得到的结果;)

    【讨论】:

    • 嘿,发生在我们所有人身上。 :) 感谢您的反馈!
    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2011-01-08
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多