问题路由域子文件夹

时间:2010-03-27 19:24:43

标签: jquery asp.net-mvc routing

我是ASP.NET MVC的新手,我希望这不是一个太愚蠢的问题。所以来了。

我有......

我的问题......

  • 我的应用程序的路由(它在域名后不使用子文件夹就可以正常工作)。应用程序主页加载不错,有css文件,但没有像图像(在css文件中定义)的资源,没有jQuery ajax调用类似于 / mycontroller / myaction
  • 链接仅运行一次(第二次我获得与此链接类似的网页:http://mydomain/mysubfoler1/myappfolder/myController/myController/myAction
  • jquery ajax调用无效。 (我在脚本文件夹中有其他js文件,它们调用多个控制器操作.p.e。


$.getJSON("../mycontroller/myaction/" + id, function(figure) {
    // do something
    });



这是我的 Global.asax 包含路由:

public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(    
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "myController", action = "Index", id = "" }
        defaults    
    );

    routes.MapRoute(    
        "Root",
        "",
        new { controller = "myController", action = "Index", id = "" }   
    );    
}

protected void Application_Start()    
{    
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new MyApplicationWeb.LocalizationWebFormViewEngine());
    RegisterRoutes(RouteTable.Routes);
    //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}

有什么建议吗?我的第一个建议是使用以下区域:

"mysubfolder1/myappfolder/{controller}/{action}/{id}"

(但没有任何运气)

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

我遇到类似的问题,内容没有正确加载,使用UrlHelper类能解决我的问题。此助手将为您的内容,链接等生成正确的URL。

<%=Url.Content("~/Content/Images/image.jpg")%>
<%=Url.Action("MyAction")%>

答案 1 :(得分:1)

对您的应用程序的每个请求都将被拆分为斜杠字符之间的URL标记。路线“{controller}/{action}/{id}”将匹配域名后的网址的前三个部分。

因此,添加子文件夹会破坏您的应用程序,因为子文件夹将被解释为控制器参数。当你说你使用“”mysubfolder1 / myappfolder / {controller} / {action} / {id}“没有任何运气时,你的意思是什么?这将是一个适合你的简单方法。

当你说你的链接不起作用时,我猜你可能没有正确生成它们。您应该使用Url.ActionUrl.Content方法在应用程序内正确生成链接 - 这可以防止它们在您移动文件夹和路由表时中断。

答案 2 :(得分:1)

  

... css文件,但没有像这样的资源   图像(在css文件中定义)和   没有jQuery的ajax调用类似于   / myController的/ myaction

您需要编辑任何和所有jQuery / CSS图像链接或URL。 ASP.NET MVC路由仅适用于传入的Web请求,并且由于您的css文件是静态的,因此使用background-image: url('../images/background.png')引用的任何图像都将相对于css文件所在的文件夹。

正如其他答案所述,在任何View(。ascx和.aspx文件)中,使用<%= Url.Action("ActionName") %>根据您的路由生成正确的网址。同样,使用<%= Url.Content("~/folder/something.png") %>为Web服务器上的任何内容生成链接(图像,css,js等)。

但是,你不能在.css和.js文件中使用它们,因为它们不是使用ASP.NET WebForms视图引擎解析的。


根据评论更新:

由于ASP.NET不负责提供.css.js等静态文件,因此您需要对文件中的操作/控制器的URL进行硬编码。

另一种方法,即可能是凌乱的方法,是将字符串放在.css / .js文件中,这些文件可以轻松区分(例如:{someAction})而不是实际的网址,然后将.css.js个文件链接指向action上的controller。然后,该操作将获取相应的文件,用适当的URL替换其中的所有字符串,然后将其输出回用户。然后,您将使用以下内容来提供文件

return Content(fileText, "text/css"); // or "text/javascript"

另一种方法是将任何css / js放在一个单独的视图中(没有母版页),这使您可以使用Html和Url Helpers。然后,您可以通过使用正确的代码返回适当的视图来提供这些文件。注意:请确保设置正确的ContentType,请参阅ASP.NET MVC and text/xml content type