Url.Content()不处理复杂的URL

时间:2013-07-08 16:23:32

标签: asp.net-mvc url asp.net-mvc-4 absolute-path

我的观点中到处都有Url.Content()个摘要。它们在具有简单URL的页面上工作正常,但在URL变长时则不行。

以下是一个示例:

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

当我在主页上或网址为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 个答案:

答案 0 :(得分: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重写器出现问题。