根路由中断路径

时间:2009-03-09 19:45:36

标签: asp.net asp.net-mvc

我正在将ASP.NET MVC应用程序部署到IIS 6,但遇到了根路径问题。

在Global.asax中,我有根路径映射:

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

当我导航到http://servername:70/test2/时,应用会显示正确的页面,但样式表和JavaScript文件未加载。查看源代码,路径显示如下:

<script src="test2/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" 
    href="test2/Content/stylesheets/app.css" />

这使浏览器寻找

  

http://servername:70/test2/test2/Content/stylesheets/app.css

当我直接进入控制器(http://servername:70/test2/Dashboard.aspx)时,路径是正确的:

<link rel="stylesheet" type="text/css" href="Content/stylesheets/app.css" />

使用ActionLink生成的任何链接也会发生这种情况。使用Url.Content:

生成样式表和脚本路径
<link rel="stylesheet" type="text/css" 
    href="<%= Url.Content("~/Content/stylesheets/app.css") %>" />

2 个答案:

答案 0 :(得分:0)

我最近回答了类似于此的question,它使用了Rob Conery的Script Registration Helper。我将在这里为您复制答案,并为样式表添加示例HtmlHelper。

public static string RegisterJS(this System.Web.Mvc.HtmlHelper helper, string scriptLib) {
  //get the directory where the scripts are
  string scriptRoot = VirtualPathUtility.ToAbsolute("~/Scripts");
  string scriptFormat="<script src=\"{0}/{1}\" type=\"text/javascript\"></script>\r\n";
  return string.Format(scriptFormat,scriptRoot,scriptLib);
}

public static string RegisterCSS(this System.Web.Mvc.HtmlHelper helper, string styleLink, string rel) {
  //get the directory where the css is
  string stylesheetRoot = VirtualPathUtility.ToAbsolute("~/Content/Stylesheets");
  string styleFormat="<link type='text/css' href='{0}/{1}' rel='{1}' />\r\n";
  return string.Format(styleFormat, stylesheetRoot, styleLink, rel);
}

用法:

<%= Html.RegisterJS("myscriptFile.js") %>
<%= Html.RegisterCSS("app.css") %>

希望这有帮助。

,我注意到Levi对该问题有另一个回复:

  

这应该在RC2中修复。如果您使用RC2但仍然遇到此问题,请在http://forums.asp.net/1146.aspx提交错误。

如果这是您的首选答案,请提升Levi's response

答案 1 :(得分:0)

或者,使用Url.Content ...

<link href="<%=Url.Content("~/Content/Site.css") %>" rel="stylesheet" type="text/css" />