3

我的观点中到处都有Url.Content()片段。它们在具有简单 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 级,而不是使用 Web 应用程序的真正根目录。我想 URL 采用host/controller/action形式的约定是有意义的,但这里我有一个更复杂的 URL 方案(我使用 URL 重写器模块将这些 URL 片段与操作的参数匹配)。

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

(顺便说一句,我正在使用 MVC 4)


编辑: 正如 Felipe 回答的那样,我刚刚发现 Url.Content 不再需要 MVC 4。这适用于所有具有恒定路径的“设计”图像。但是,我使用了很多图像,其中路径部分是用一些数据构建的,例如

<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. 仍然在这里~,找不到图像。我该如何解决?

4

2 回答 2

11

在 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 重写器有问题。

于 2013-07-08T16:44:01.497 回答
0

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

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



<div style="background-image:url(@logoPath);">
于 2021-12-04T14:28:50.333 回答