2

ビューで 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 に渡される前に、値が変更されていないことをデバッガーで確認しました。

4

2 に答える 2

1

あなたのサイトの他のページを指している URL は絶対的ではないようです。またはで始まると確信しています/http? そうでない場合は、想定どおりに動作し、相対 URL のように扱っているため、現在の URL に追加されています。

Html.Raw文字列を操作しないので、ここで問題はありません)

また、あなたのコードを見せても問題ありません。

于 2012-04-06T18:42:15.700 に答える
1

いいえ、実際には私はばかです。実際、URL は先頭に / を付けずに相対形式で保存されていたため、最終的に現在のページに対する相対 URL になっていました。表示されるテキストは絶対的なものでした。これは、データベースを見たときに見たものです。それが、数時間の睡眠でのデバッグで得られるものです;)

于 2012-04-06T23:35:30.100 に答える