Попробуйте это:
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>"></script>
Или использование MvcContrib и делают это:
<%=Html.ScriptInclude("~/Content/Script/jquery.1.2.6.js")%>
В ASP.NET я обычно использую <img src='<%= VirtualPathUtility.ToAbsolute("~/images/logo.gif") %>' alt="Our Company Logo"/>
. Я не вижу, почему аналогичное решение не должно работать в ASP.NET MVC.
<script src="<%=ResolveUrl("~/Scripts/jquery-1.2.6.min.js") %>" type="text/javascript"></script>
то, что я использовал. Путь изменения для соответствия примеру.
Если это имеет значение я действительно ненавижу идею замусорить мое приложение тегами сервера только для разрешения путей, таким образом, я провел немного больше исследования и решил использовать что-то, что я попробовал прежде за перезапись ссылок - фильтр ответа. Таким образом я могу снабдить префиксом все полные пути известный префикс и заменить его во времени выполнения с помощью Ответа. Объект фильтра и не должен волноваться о ненужных тегах сервера. Код отправляется ниже в случае, если он поможет кому-либо еще.
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
namespace Demo
{
public class PathRewriter : Stream
{
Stream filter;
HttpContext context;
object writeLock = new object();
StringBuilder sb = new StringBuilder();
Regex eofTag = new Regex("</html>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Regex rootTag = new Regex("/_AppRoot_", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public PathRewriter(Stream filter, HttpContext context)
{
this.filter = filter;
this.context = context;
}
public override void Write(byte[] buffer, int offset, int count)
{
string temp;
lock (writeLock)
{
temp = Encoding.UTF8.GetString(buffer, offset, count);
sb.Append(temp);
if (eofTag.IsMatch(temp))
RewritePaths();
}
}
public void RewritePaths()
{
byte[] buffer;
string temp;
string root;
temp = sb.ToString();
root = context.Request.ApplicationPath;
if (root == "/") root = "";
temp = rootTag.Replace(temp, root);
buffer = Encoding.UTF8.GetBytes(temp);
filter.Write(buffer, 0, buffer.Length);
}
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return filter.CanSeek; }
}
public override bool CanWrite
{
get { return true; }
}
public override void Flush()
{
return;
}
public override long Length
{
get { return Encoding.UTF8.GetBytes(sb.ToString()).Length; }
}
public override long Position
{
get { return filter.Position; }
set { filter.Position = value; }
}
public override int Read(byte[] buffer, int offset, int count)
{
return filter.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return filter.Seek(offset, origin);
}
public override void SetLength(long value)
{
throw new NotImplementedException();
}
}
public class PathFilterModule : IHttpModule
{
public void Dispose()
{
return;
}
public void Init(HttpApplication context)
{
context.ReleaseRequestState += new EventHandler(context_ReleaseRequestState);
}
void context_ReleaseRequestState(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app.Response.ContentType == "text/html")
app.Response.Filter = new PathRewriter(app.Response.Filter, app.Context);
}
}
}
Как и Крис, я действительно терпеть не могу помещать раздутые серверные теги в мою чистую разметку просто для того, чтобы указать глупой штуке, чтобы она смотрела от корня вверх. Это должно быть очень простой и разумный вопрос. Но я также ненавижу мысль о необходимости писать какие-либо собственные классы C #, чтобы делать такую простую вещь, зачем мне это нужно? Какая трата времени.
Для меня я просто пошел на компромисс в отношении «совершенства» и жестко запрограммировал имя корневого пути виртуального каталога внутри своих ссылок на пути. Примерно так:
<script type="text/javascript" src="/MyProject/Scripts/jquery-1.2.6.js"></script>
Для разрешения URL-адреса не требуется никакой обработки на стороне сервера или кода C #, что лучше всего для производительности, хотя я знаю, что в любом случае это будет незначительно. И никакого раздутого уродливого серверного хаоса в моей красивой чистой разметке.
I '
Я использовал немного другой подход, основанный на аналогичном сообщении SO, но с гораздо меньшим количеством кода ...
http: //a.shinynew.me/post/6042784654/relative-paths-in-asp-net-mvc-javascript