Url.Content() 不适用于复杂的 URL

Posted

技术标签:

【中文标题】Url.Content() 不适用于复杂的 URL【英文标题】:Url.Content() not working on complex URLs 【发布时间】:2013-07-06 01:42:56 【问题描述】:

Url.Content()sn-ps 在我的视野中无处不在。它们在具有简单 URL 的页面上工作正常,但当 URL 变长时就不行了。

这是一个示例:

<img src="@Url.Content("~/Content/Images/logo.png")" id="logo">

当我在主页或 URL 为 localhost:8080/s/chocolate 的页面(显示“巧克力”搜索的结果。

但是当我尝试添加一些改进时,例如localhost:8080/s/chocolate/b/lindt(这意味着将以前的结果过滤到仅来自品牌 Lindt 的结果),它不再起作用了。在这种情况下,Url.Content 指向/s/chocolate/Content/Images/logo.png,显然失败了。

就好像Url.Content 只在当前位置上移了 2 级,而不是使用网络应用程序的真正根目录。我想按照惯例,URL 的格式为 host/controller/action 是有道理的,但这里我有一个更复杂的 URL 方案(我使用 URL 重写器模块将这些 URL 片段与操作的参数相匹配)。

有没有办法告诉助手去真正的根,或任何其他解决这个问题的方法?

(顺便说一句,我使用的是 MVC 4)


编辑: 正如Felipe 回答的那样,我刚刚发现MVC 4 不再需要Url.Content。这适用于所有具有恒定路径的“设计”图像。但是,我使用了很多图像,其中路径部分由一些数据构成,例如
<img src="@Url.Content(string.Format("~/Content/Images/stores/0.png", cart.Store.Retailer.Id))"/>

我只是删除了 Url.content,如下所示:

<img src="@string.Format("~/Content/Images/stores/0.png", Model.PreferedCart.Store.Retailer.Id)"/>

渲染时,会给出以下 src:~/Content/Images/stores_v2/Fr_SimplyMarket.png~ 还在这里,找不到图像。我该如何解决?

【问题讨论】:

【参考方案1】:

在 ASP.NET MVC 4+ 中,您不需要在属性值中使用 Url.Content。直接使用~/ 语法,让razor view engine 2 为你处理路径。所以你的例子可以编码如下:

<img src="~/Content/Images/logo.png" id="logo">

如果您需要创建动态路径,则必须使用Url.Content,作为示例:

@
   string imagePath = Url.Content("~/Content/Images/stores/" + Model.PreferedCart.Store.Retailer.Id + ".png");

<img src="@imagePath"/>

如果它不起作用,原因是你的 URL 重写器有问题。

【讨论】:

它就像一个魅力,但我试图从 App_Data 文件夹而不是 Content 文件夹中获取图像。不知何故,它不工作。任何想法【参考方案2】:

在 ASP.NET Core 5 中,在 razor 页面中使用以下代码可以正常工作。

@ 
    string logoPath = Url.Content("~/img.jpg");




<div style="background-image:url(@logoPath);">

【讨论】:

以上是关于Url.Content() 不适用于复杂的 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 WebForms 页面中使用 Url.Content 会错误地解析波浪号

Quickblox 不适用于子域 url

Web 视图不适用于某些特定的 url

C++:url 阅读器功能不适用于带有 \ 符号的 URL 链接。请帮助我

“@Url.Content”和“@Href”有啥区别?

tintColor 不适用于 watchOS 5 复杂功能