2011-11-17 108 views
2

我用我的.NET網站路由。路由問題(.NET不MVC)

我希望這個網址

http://www.website.com/condos/rent/{state}/{area}

要轉到http://www.website.com/condos.aspx然後拿起國家和地區。

這工作得很好:

routes.MapPageRoute("CondosForRentInArea", "condos/rent/{state}/ 
{area}", "~/condos.aspx"); 

,但我有一些問題的JavaScript。因爲我不能寫:

routes.MapPageRoute("StateAreaJS", "condos/rent/{state}/{area}/scripts/ 
{filename}.js", "~/scripts/{filename}.js"); 

我發現了另外一個問題在這裏#2:Wildcards with ASP.NET MVC MapPageRoute to support organizing legacy code

,但我不是在這個網站使用MVC。我曾經嘗試這樣做:

routes.Add("CondosRentStateAreaJS", new Route("condos/rent/{state}/{area}/scripts/ 
{filename}.js", new StateAreaJSRouteHandler())); 

和:

public class StateAreaJSRouteHandler : IRouteHandler 
    { 
     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      string filename = requestContext.RouteData.Values["filename"] as string; 

      if (string.IsNullOrEmpty(filename)) 
      { 
       requestContext.HttpContext.Response.Clear(); 
       requestContext.HttpContext.Response.StatusCode = 404; 
       requestContext.HttpContext.Response.End(); 
      } 
      else 
      { 
       requestContext.HttpContext.Response.Clear(); 
       requestContext.HttpContext.Response.ContentType = "text/javascript"; 

       // find physical path to image here. 
       string filepath = requestContext.HttpContext.Server.MapPath("~/scripts/" + filename + ".js"); 

       requestContext.HttpContext.Response.WriteFile(filepath); 
       requestContext.HttpContext.Response.End(); 
      } 
      return null; 
     } 
    } 

堅果我不認爲代碼調用,因爲將一個破發點中的行「字符串的文件名......」嗟。

奇怪的是,CSS是存在的,文件夾/文件名,然後服務器刀片../../../但JS丟失。

那麼,如何正確地得到/state/area/scripts/file.js是公正"~/scripts/file.js"

---------------編輯---------------

你絕對讓我走上正軌。我要通過代碼隱藏添加腳本和樣式。我最終得到一個很好的解決方案是這樣的:

HtmlGenericControl validatejs = new HtmlGenericControl("script"); 
validatejs.Attributes.Add("type", "text/javascript"); 
    validatejs.Attributes.Add("src", ResolveUrl("~/scripts/validate.js")); 
    this.Page.Header.Controls.Add(validatejs); 


    HtmlLink fontscss = new HtmlLink(); 
    fontscss.Href = "~/styles/fonts.css"; 
    fontscss.Attributes.Add("rel", "stylesheet"); 
    fontscss.Attributes.Add("type", "text/css"); 
    this.Page.Header.Controls.Add(fontscss); 

,我只是想增加(對其他Google員工),這種方法使我能夠刪除我的JS和CSS CustomRouteHandlers,使整個項目更有條理,很可能更快。

回答

1

可你只要把你的母版頁腳本參考?這樣,它會提供並使它輕鬆了許多。

0

你也可以把它使用在頁面上的參考,或使用下面的代碼對你的母版由阿肖克的建議。在前面,使用文字和代碼後面這樣做(顯然改變你的名字):

litJquery.Text = "<script type=\"text/javascript\" src=\"" + Page.ResolveClientUrl("~/js/jquery-1.6.min.js") + "\"></script>"; 

祝你好運!