Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC RC returns wrong path for Url.Content

UPDATE this issue does not exist in the release bits of ASP.NET MVC

I have an ASP.NET MVC RC app which runs fine under the debugger running from http://localhost:9002/ But when I publish it to http://localhost/Zot/ the calls to Url.Content are returning incorrect values.

I have script tags like

<script src="<%= Url.Content("~/Scripts/util.js") %>" ...

In the published site this produces:

<script src="Zot/Scripts/util.js" ...

Instead of

<script src="/Zot/Scripts/util.js" ...

or

<script src="Scripts/util.js" ...

I have stylesheet tags like:

<link href="~/Content/Site.css" runat="server" ...

That produce the right thing:

<link href="Content/Site.css" ...

Any suggestions on why Url.Content is failing. I clearly can't put a runat="server" on the <script> tags.

like image 834
Rob Walker Avatar asked Mar 04 '09 21:03

Rob Walker


2 Answers

I tend to use Rob Conery's Script Registration helper:

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

Usage:

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

As you can see in the example, this uses VirtualPathUtility to resolve the url of the Scripts directory. This should also help to bypass the problem of tag soup.

like image 87
Dan Atkinson Avatar answered Nov 14 '22 21:11

Dan Atkinson


This should have been fixed in RC2. If you are using RC2 and are still seeing this problem, please file a bug at http://forums.asp.net/1146.aspx.

like image 43
Levi Avatar answered Nov 14 '22 22:11

Levi