2011-08-31 91 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中,並刪除沒有控制器名稱的控制器名稱。