2012-03-12 81 views
3

我需要能够把图像相对于视图的路径,但我不知道如何做到这一点,因为我没有MVC路由很好的把握:在Asp.Net MVC中路由相对于视图的图像?

如果我有像这样的路线:

routes.MapRoute(
       "Parameter", 
       "{controller}/{action}/{lang}/{prod}", 
       new { controller = "Manuals", action = "Product", lang = "en-US", prod = "productname" } 

然后我尝试使用相对路径的图片:

<embed class="images src="@Url.Content("images/sampleimage.svg")"></embed> 

这给了我一个路径(如果我在网上检查检查吧),看起来像这个: src =“http:// localhost/Manuals/Pr oduct/en-US/images/sampleimage.svg“

这不是图像的位置。它实际位于“http://localhost/Views/Manuals/en-US/productname/images/sampleimage.svg”

因此,基本上,视图文件夹,然后没有像操作名称(产品) 。那么如何在这个环境中使用相对于视图的路径?该操作成为url的一部分,但没有像操作方法那样命名的实际文件夹,并且图像也将位于Views文件夹下,该文件夹不是url的一部分...此外,url中的最后部分路径(产品名称)在图像路径中似乎没有出现,它似乎被解释为一个id或某个东西,因为我只使用一个操作方法来为基于参数lang和prod的视图提供服务?

有没有办法像这样放置图像,并使用像“images/imagename.svg”之类的相对路径?或者我只是误解MVC中的路由?

我需要做这样的简化添加内容是大规模和XSL转换的结果...

编辑:对不起,我有一些不正确的,给我的结果的URL。现在应该修复,以反映我有什么。

回答

2

我不确定你是否理解框架应该如何工作。

我的第一点是关于该公约。惯例是您将视图存储在Views文件夹中。然后,您可以为显示/编辑模板或共享部分视图分配DisplayTemplates,EditTemplates和Shared。这是MVC开发人员习惯的惯例,所以如果你开始在这些文件夹中放置其他东西,你会混淆其他开发者,最终你自己。

你想达到什么目的?你是否在某些特定格式的网址之后?您拥有的选项之一是实施将返回您的图像的操作。另一个替代方案是URL重写或路由到静态文件:Using ASP.NET routing to serve static files

2

使用一个控制器动作摆脱DB或磁盘中的图像。 以下是从站点根目录中名为“ImageFolder”的文件夹获取图像的示例。

public virtual FilePathResult GetImage(string imageId){ 
    var path = Path.Combine(Server.MapPath("~"), "ImageFolder", imageId + ".svg"); 
    return new FilePathResult(path, "image/jpg"); 
} 

您可以使用类似的东西来检索您的产品的示例图像。

在ASP.NET MVC你不依赖于文件夹层次浏览您的网站。该框架有一些文件夹约定,但它们不用于路由。

对于静态图像,可以将它们放置在内容/图片文件夹中。