2011-08-31 90 views
1

我们在主索引页面内使用Iframe。我写了一个控制器,可以让你像处理程序那样请求资源(图像,Js,Css等)。如何统一iframe中呈现的视图的路由网址

@Html.Css("Ico16", "Add") 
//Converts to this 
<link src="Style?Key=ico16&File=add" type="text/css" /> 

路由到请求图像也会出现相同这样:

<img src="Image?Key=ico16&File=add" /> 

然而,这下一个路由仅适用于I帧内显示视图。

<link src="Default/Style?Key=Ico16&File=Add" type="text/css" /> 

最后,水就变得略微浑浊BC如上图所示......如果我是一个内外部JavaScript文件虽然只有CSS请求的动作,我必须在控制器名又像增加至路线所以:

$(document).ready(function() 
{ 
    $('#SomeDiv').append('<img src="Default/Image?Key=ico16&File=add"></img>'); 
}) 

我如何统一这些路线使他们都一致?我坦率地不在乎它写的是哪种方式,只要它对于不同的内容区域来说没有什么不同。

的路线:

routes.MapRoute(
     "PlatformIFrame", 
     "{controller}/{action}/{key}", // URL with parameters 
     new { controller = "Default", action = "Index", key = UrlParameter.Optional } // Parameter defaults 
    ); 
    routes.MapRoute(
     "Platform", 
     "{action}/{key}", // URL with parameters 
     new { controller = "Default", action = "Index", key = UrlParameter.Optional } // Parameter defaults 
    ); 

控制器:

public class DefaultController : Controller 
{ 
    public ActionResult Style(string key, string file) 
    { 
    } 

    public ActionResult Script(string key, string file) 
    { 
    } 

    public ActionResult Image(string key, string file) 
    { 
    } 
} 
+0

为什么不直接链接到样式,脚本和图像的内容? – Cymen

+0

@Cymen两个非常有道理的理由:首先,我有一个内部缓存过程,缓存取决于拦截资源请求的能力。你如何轻松地容纳那些直接放置资源? 第二个原因是为了可维护性。如果我们决定重新安置我们所有的资源呢?你想成为那些必须更新所有资源URL的人吗? –

回答

0

我已经想过这一点,我想答案可能很简单。

只能使用这条路线:只有


    routes.MapRoute(
     "Platform", 
     "{action}/{key}", // URL with parameters 
     new { controller = "Default", action = "Index", key = UrlParameter.Optional } // Parameter defaults 
    ); 

使用这种风格的(注意开头的“/”)为您的网址:

<link src="/Style?Key=Ico16&File=Add" type="text/css" /> 

如果你想完全摆脱这个问题,你也可以这样做:

<link src="<%: Url.Action("Style", "Default", new { key = "Ico16", file = "Add" }) %>" type="text/css" /> 

如果你选择上述选项,你应该离开包含th e控制器名称在URL中,并删除没有控制器名称的控制器名称。