2012-04-12 6 views
0

В моем приложении MVC3 Razor Я имею в виду Ajax в макет страницы, как@ Url.Content изменений после публикации

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

Когда я запускаю это в моей локальной машине, его прекрасно работает .. Однако после публикации, используя IIS7 , мои вызовы ajax не работают. Когда я проверил View Source в браузере, ссылка выглядит как <script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> перед публикацией и <script src="mvcapplication/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> после публикации. Я смущен. Почему URL-адрес изменился?

+1

нет никаких проблем. – Yorgo

ответ

0

Поскольку на сервере приложение имеет виртуальный путь «mvcapplication», то есть приложение находится в IIS в виртуальном каталоге «mvcapplication». Это не имеет никакого отношения к asp.net mvc, это настройка IIS.

+0

Спасибо, Майк. Я был бы признателен, если бы вы сообщили мне изменения, которые мне нужно внести в IIS, чтобы отразить URL. – Poobalan

+0

У вас есть полный контроль над сервером? Или, по крайней мере, вы уверены, что нет другой настройки приложения как /? Обычно приложение настраивается в виртуальном каталоге, потому что он не может быть установлен в корневом каталоге («/»). – MikeSW

+0

Мои вызовы jquery $ .ajax() имеют url:/Controller/Action .. Так как имя виртуального каталога добавлено после публикации, теперь для вызова ajax нужен url: mvcapplication/Controller/Action .. Как это решить? – Poobalan

1

Url.Content(string contentPaht) использует метод VirtualPathUtility.ToAbsolute(string contentPath) создать абсолютный URL:

public string Content(string contentPath) 
{ 
    if (string.IsNullOrEmpty(contentPath)) 
    { 
     throw new ArgumentException(MvcResources.Common_NullOrEmpty, "contentPath"); 
    } 
    if (contentPath[0] == '~') 
    { 
     return VirtualPathUtility.ToAbsolute(contentPath, 
       this.RequestContext.HttpContext.Request.ApplicationPath); 
    } 

    return contentPath; 
} 

Как вы можете видеть Request.ApplicationPath используется, который respresents в виртуальный каталог. Когда аргумент contentPath не начинается с ~, он возвращает contentPath без использования метода ToAbsolute(string contentPath).

Таким образом, вы можете попробовать использовать:

@Url.Content("/Scripts/jquery.unobtrusive-ajax.js") 

Edit: Вы можете также попытаться изменить маршрут по умолчанию:

routes.MapRoute(
    "Default", 
    "NameVirtualDirectory/{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

Я пробовал это и не работал – Poobalan

+0

Мои вызовы jquery $ .ajax() имеют url:/Controller/Action .. Так как имя виртуального каталога добавлено после публикации, теперь для вызова ajax нужен url: mvcapplication/Controller/Action .. Как это решить? – Poobalan

+0

Вы можете попытаться изменить маршрутизацию по умолчанию в Global.asax, см. Мое редактирование. –

Смежные вопросы