2009-12-11 2 views
3

D'abord, nous avons la forme:Quelle est la manière correcte et la plus simple de gérer les URL de contenu dans ASP.NET MVC?

<link href="../../../content/somecontent" /> 

Ceci est gênant pour comprendre (il faut compter la profondeur de chemin, un par un) et les plus sujettes à des erreurs. Quelqu'un est venu avec ceci:

<link runat="server" href="~/content/somecontent" /> 

Ceci est plus facile mais je ne sais pas comment je peux utiliser cette solution. Peut-il être utilisé n'importe où? Est-ce que ça marche avec Spark? Comment cela affecte-t-il la vitesse de rendu? Et le dernier et le pire station serait:

<link href="/content/somecontent" /> 

Cela ne permet pas l'application Web pour résider dans un sous-répertoire que je n'aime pas, en particulier à des fins de test. Y a-t-il d'autres façons, meilleures, que je ne connais pas?

Répondre

8

Vous pouvez utiliser

<link href="<%= Url.Content("~/Content/somecontent") %>" /> 

pour pointer vers un fichier quelconque. L'utilisation des emplacements relatifs (votre premier exemple) ne fonctionnera pas tout le temps en raison de la manière dont le routage peut changer en fonction de l'URL actuelle. Dans la plupart de mes projets, j'utilise des aides URL pour faire ce genre de chose.

public static class ExtensionsOfUrlHelper 
{ 
    // TODO: Prepare for .NET 4.0, this will return MvcHtmlString 
    public static string Asset(this UrlHelper url, string asset) 
    { 
     var path = "~/assets/" + asset; 
     return string.Format("<link href=\"{0}\" />", url.Content(path)); 
    } 
} 

Cela permet de maintenir le point de vue plus léger, et je peux taper ...

<%= Url.Asset("some_asset") %> 

... et être fait avec elle.

Lorsque .NET 4.0 sort, et vous mettez à jour votre base de code, vous allez changer votre statique pour retourner un nouveau MvcHtmlString brillant. Cela va heureusement prévenir et double-échapper. (Et vous voudrez le faire dans n'importe quel code qui écrit HTML.)

+0

Bon conseil. Je ne connaissais pas l'assistant Url.Content(). J'attendrai un peu plus pour que les réponses arrivent, merci. –

+0

Ne pas oublier les autres helpers HTML tels que ActionLink(), etc. – GalacticCowboy

Questions connexes