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 会错误地解析波浪号