我的观点中到处都有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
。 ~
仍然在这里,找不到图像。我该如何解决这个问题?
答案 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重写器出现问题。