如何统一iframe中呈现的视图的路由Url

时间:2011-08-31 16:30:58

标签: asp.net-mvc routing

我们在主索引页面中使用了iframe。我写了一个控制器,允许一个人请求资源(图像,Js,Css等......),就像你使用处理程序一样。

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

请求图片的路线也将如此显示:

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

但是,下一个路线仅适用于Iframe中显示的视图。

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

最后,虽然css只请求上面显示的Action,但是水会变得更加模糊...如果我在外部javascript文件中,我必须再次将控制器名称添加到路径中:

 $(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)
    {
    }  
 }

1 个答案:

答案 0 :(得分: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" />

如果选择上述选项,则应将包含控制器名称的路由保留在URL中,并删除没有控制器名称的路由。