路由问题(.NET不是MVC)

时间:2011-11-17 11:58:53

标签: c# asp.net .net .net-4.0 routing

我在.net网站上使用路由。

我想要这个网址

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");

我在Stackoverflow上找到了另一个问题: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;
        }
    }

Nut我不认为代码被调用,因为在“string filename ...”行中放置一个断点永远不会命中。

奇怪的是,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);

我只想添加(对于其他googlers)这种方法使我能够删除我的JS和CSS CustomRouteHandlers,使整个项目更有条理,可能更快。

2 个答案:

答案 0 :(得分:1)

您可以将脚本引用放在母版页中吗?这样它将可用并使其更容易。

答案 1 :(得分:0)

您也可以将参考文献放在正在使用的页面上,或者按照Ashok的建议使用您母版页上的代码。在正面,使用文字和后面的代码执行此操作(显然更改为您的名字):

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

祝你好运!