路由问题(.. NET而不是MVC)

本文关键字:MVC 问题 NET 路由 | 更新日期: 2023-09-27 18:14:52

我正在使用路由在我的。net网站。

我想要这个url

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上发现了另一个问题:通配符与ASP。. NET MVC MapPageRoute支持组织遗留代码

但我不使用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;
        }
    }

但我不认为代码被调用,因为在行中放置一个断点"string filename…"从来没有命中。

奇怪的是,CSS在那里,服务器插入…/…/…/之前的文件夹/文件名,但JS丢失。

那么我如何正确地得到/state/area/scripts/file.js只是"~/scripts/file.js" ?

--------------- EDIT ---------------

你绝对让我走上了正确的道路。我应该通过代码隐藏添加脚本和样式表。我最终得到了这样一个很好的解决方案:

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

和我只是想添加(为其他谷歌人),这种方法使我能够删除我的JS和CSS CustomRouteHandlers,使整个项目更有组织,可能更快。

路由问题(.. NET而不是MVC)

你能把脚本引用放在你的主页上吗?这样它就可用了,而且会容易得多。

你也可以把引用放在它正在使用的页面上,或者按照Ashok的建议在你的主页上使用下面的代码。在前面,使用文字,并在后面的代码中这样做(显然要更改您的名称):

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

祝你好运!