2012-04-06 5 views
2

Ich benutze ASP.NET MVC 3 und den Helfer @ Html.Raw aus meiner Sicht.ASP.NET MVC3 Html.Raw ändern absolute URLs?

Ich übergebe es einige HTML-Markup, die ich in einer Datenbank gespeichert habe. Das Markup enthält einige URLs, die auf andere Orte auf meiner Website verweisen. Zum Beispiel http://www.foo.fom/events. Bei diesen Daten handelt es sich um Forumsbeiträge. Die Seite, auf der sie angezeigt werden, hat das Format http://www.foo.com/forums/thread/42/slug. Dies geschieht nur für URLs auf meiner Website

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

:

Wenn jedoch die Seite gerendert wird, werden die gespeicherten URLs in modifizierter Form als gerendert. Wenn die URL auf eine externe Site verweist, ist sie unverändert.

Ich habe überprüft, dass was ich in @ Html.Raw übergebe, ist die richtige URL (http://www.foo.com/events). Warum wird es geändert, wenn die Seite gerendert wird? Gibt es eine einfache Möglichkeit, diese "Funktion" zu deaktivieren?

Hier ist mein Code zum Anzeigen der Markup:

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

und hier ist der Controller-Code, der die Seitendaten genrates:

var post = _forumRepository.GetPostById(id) 

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

return View(model); 

ich über Debugger, der in der Post die genaue URL überprüft haben. Der Körper, bevor er an die Ansicht zurückgegeben wird, hat die Form "http://www.foo.com/events" (kein abschließender Schrägstrich). Ich habe auch über Debugger überprüft, dass der Wert unverändert ist, bevor es in @ Html.Raw übergeben wird.

+0

Zeig uns deinen eigentlichen Code. Html.Raw macht keine URL-Neuzuordnung, also ist es etwas anderes, das es tut. –

+0

Wie @Mystere bemerkt, manipuliert 'Html.Raw' Ihre Daten nicht. Bitte zeigen Sie uns den genauen Inhalt von 'post.Body' - vielleicht schreiben Sie es in eine Datei, damit wir genau wissen, was diese Daten sind. –

+1

Das ist etwas merkwürdig. Wie stellen Sie aus Ihrer Sicht "Post" ein? Sollte das Model.Body nicht sein? –

Antwort

1

Es klingt wie die URLs, die auf andere Seiten auf Ihrer Website verweisen, sind nicht absolut. Sind Sie bestimmte sie beginnen mit einem / oder http? Wenn nicht, verhält es sich genau so, wie es angenommen wird, und behandelt sie wie relative URLs - und fügt sie so an die aktuelle URL an.

(Html.Raw wird die Zeichenfolge nicht manipulieren, es ist also hier keine Schuld)

Auch würde es nicht schaden, uns Ihren Code zu erhalten.

1

Nein, in der Tat bin ich ein Idiot. Die URLs wurden in der Tat in relativer Form ohne ein führendes/gespeichert, weshalb sie relativ zur aktuellen Seite wurden. Der angezeigte Text war absolut, was ich sah, als ich auf die db schaute. Das bekomme ich zum Debuggen auf ein paar Stunden Schlaf;)

+0

Heh, ist uns allen passiert. :) Danke für deine Rückmeldung! –