2010-08-03 196 views
1

在我的应用程序中,我有一个区域调用Mobile。在这个区域我有一个文件夹调用资产,我们放置所有的CSS,JavaScript和图像。无法在ASP.NET MVC 2中使用相对路径和区域

访问视图工作得很好。 http://localhost/webapp/mobile/stuff

问题是当我访问我的CSS,JavaScript和图像。

在我看来,我不能这样做。

<img src="Assets/css/styles.css" /> 

的原因是因为真正的网址是:http://localhost/webapp/areas/mobile/assets/css/styles.css

有没有一种方法来映射http://localhost/webapp/areas/mobilehttp://localhost/webapp/mobile对静态文件?

感谢, 兰德尔

回答

3

我想出的解决方案是使用一个简单的IHTTPModule,它会为我重写url。以下是我为BeginRequest事件实施的方法。

void BeginRequest(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    var path = context.Request.Path; 

    // Add Areas to the Mobile path, so we don't have to specify it manually. 
    // This is mainly for handling static resources that you place in areas. 
    if (!path.Contains("Mobile/")) return; 
    if (path.EndsWith(".png") || 
     path.EndsWith(".gif") || 
     path.EndsWith(".css") || 
     path.EndsWith(".js") || 
     path.EndsWith(".htm") || 
     path.EndsWith(".cache")) 
     context.RewritePath(path.Replace("Mobile/", "Areas/Mobile/")); 
} 
1

你可能需要做这样的事情:

<img src="../../Mobile/Assets/css/styles.css" /> 

...取决于您的当前目录实际上是。您也可以尝试这样的:

<img src="~Mobile/Assets/css/styles.css" /> 

的一个好办法找出实际的路径应是从Project Explorer拖动资产(在这种情况下Styles.css中)到您的视图,并让视觉工作室为您创建路径。