Search code examples
asp.netasp.net-mvcurl-routingignoreroute

IgnoreRoute in ASP.MVC


I am trying to access a .js file in the views directory. I have an MVC application with /Views/Home/MyControl.ascx I have a js file /Views/Home/MyControl.js

I wish to reference the .js file and keep it with the control. I have tried the following entries in the routing, and none seem to work.

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });

Please help, please don't suggest adding the .js file to the scripts directory. I would like to make it work this way, or know why it cannot be done.

I would put the script into the page, only script debugging is broken in VS2010 B2.

Thanks Regards Craig.


Solution

  • The Views folder is, well for views, and javascript should be put elsewhere. That's why the designers of the MVC framework put a web.config in this Views folder that denies access to any file inside. You could modify this defaut setting but be warned that this could be a potential security hole. So open the web.config file located in the Views folder and:

    Replace:

    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    

    with:

    <httpHandlers>
      <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
      <add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
      <add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    

    Navigate to http://yoursite/Views/test.js

    P.S. You could also remove all the IgnoreRoutes you put in global.asax.