【问题标题】:Resolve virtual path in MVC在 MVC 中解析虚拟路径
【发布时间】:2011-04-14 07:33:42
【问题描述】:

嗨,

我有一个这样的地址:~/Content/Files/AdImages/20/20_thumb.jpeg,我需要解决这个问题。这是在 ASP.net 中使用 Control.ResolveUrl() 完成的。

根据这篇文章http://stephenwalther.com/blog/archive/2009/02/18/asp.net-mvc-tip-47-ndash-using-resolveurl-in-an-html.aspx,我应该使用这样的东西:

urlHelper.Content("~/Content/Files/AdImages/20/20_thumb.jpeg")

这确实会返回以下网址:/Content/Files/AdImages/20/20_thumb.jpeg 即使我不在解决方案的根目录中(内容放在根目录中)?

我该如何解决这个问题?

请注意,这是来自 html 帮助程序扩展。

//SnowJim

【问题讨论】:

    标签: asp.net-mvc url resolve urlhelper


    【解决方案1】:

    ~ 的工作是始终解析到根目录,以便您看到正确的行为。如果您希望它与您当前所在的路径相关,那么您的路径不应以 ~ 或 / 开头

    【讨论】:

    • 谢谢,我得到了路径 ~/Content/Files/AdImages/20/20_thumb.jpeg,我可以将它翻译成服务器端的绝对路径。但是,在这种情况下,我是否需要图像的相对路径。这可能会产生像 ../../Content/Files/AdImages/20/20_thumb.jpeg 这样的 img src。我该怎么做?
    • 那么我想我不清楚您要做什么。听起来您了解绝对路径。我想我不明白你为什么想要相对路径。您只需键入“../../Content/TheRestOfYourPath”。您是说有时您希望它发出 3 .. 像这样的“../../../Content”吗?如果是这样,那通常是你使用绝对路径的时候。
    • 问题是 img src 将是 /Content/Files/AdImages/20/20_thumb.jpeg 并且当 url 看起来像这样时:localhost/Ad/List (不像你在根目录中可以看到)。我假设 src 应该被翻译成类似 ../../Content/Files/AdImages/20/20_thumb.jpeg 的东西,以获得从视图到图像的正确路径。这不应该是硬编码的,因为助手可以在不同位置的不同页面上使用。在 ASP.NET 中有 Control.ResolveUrl() 来获取相对路径,我该如何在 MVC 中做同样的事情?
    • 要记住的是,MVC 的范式与专门在该领域的 Web 表单根本不同。在 MVC 中,路由不会映射到视图的物理路径,就像它们在通常提供特定 .aspx 页面的 Web 表单中那样。对于静态内容(例如,图像、css 等),它们*确实指向物理资产 - 但由于这些原因,使其相对于 MVC 视图将是有问题的。
    • 好吗?正如我所描述的那样,它不可能指向一个图像,那我该怎么办?我的文件存在于她的 ~/Content/Files/AdImages/20/20_thumb.jpeg,我怎样才能在 img 元素中使用这个文件?
    【解决方案2】:

    是的,~ 在 asp.net 中的工作方式与在 mvc 中的工作方式不同。相反,最好的选择似乎是将 ~ 替换为:

    Request.Url.GetLeftPart(UriPartial.Authority)

    所以而不是:

    urlHelper.Content("~/Content/Files/AdImages/20/20_thumb.jpeg")
    

    使用

    urlHelper.Content( Request.Url.GetLeftPart(UriPartial.Authority) + "/Content/Files/AdImages/20/20_thumb.jpeg")
    

    【讨论】:

    • 我不同意这个评论。请参阅 Steve Michelotti 的评论。 @Url.Content("~/Content/Files/AdImages/20/20_thumb.jpeg") 应该可以正常工作。
    • 为什么使用urlHelper.content?为什么不只是Request.Url.GetLeftPart(UriPartial.Authority) + "/Content/Files/AdImages/20/20_thumb.jpeg"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多