2016-09-19 2 views
0

@ Утилиты Url.Content и @Href в ASP.NET MVC работают некорректно в одной ситуации. Это ситуация, когда на локальном хосте, и она размещается в IIS, а не на IIS Express, поэтому URL-адрес выглядит как-то: http://localhost/MyApp/index-hr вместо, например, http://localhost:12345/index-hr. Это, как я называю мой сценарий:@ Url.Content и @Href не работают корректно, когда URL-адрес переписан.

<script src='@Href("~/Scripts/toastr/toastr.js")' type="text/javascript">  </script> 

Я также попытался:

<script src='@Url.Content("~/Scripts/toastr/toastr.js")' type="text/javascript"></script>, 

и:

 <script src='~/Scripts/toastr/toastr.js' type="text/javascript"></script> 

Это решает Url большой за исключением ситуации, когда URL является чем-то вроде: http://localhost/MyApp/index-hr. Мой URL-адрес /index-hr переписан и сопоставляется с контроллером Home и действием HomeIndex. Я заметил, что он разрешает ОК, когда URL-адрес равен http://localhost/MyApp/Home, поэтому, возможно, это не проблема из-за дополнительной косой черты (когда приложение размещено на локальном IIS), а потому, что URL-адрес переписан. Другие страницы с переписанным URL-адресом загружают toast.js OK, но у них более глубокие ссылки, но в этой ситуации он разрешает toast.js по этому адресу: http://localhost/Scripts/toastr/toastr.js, что приводит к 404 курсу. Он должен решить, чтобы: http://localhost/MyApp/Scripts/toastr/toastr.js

+0

Мне лично нравится «/Scripts/toastr/toastr.js», который берет корни в качестве родительской папки. и в любой ситуации он работает правильно –

+0

Пробовал. Не работает. Не работает в ситуациях, когда URL-адрес http: // localhost/MyApp/Home, даже если он переписан не работает http: // localhost/MyApp/index-hr, и он не работает с полным непереписанным URL-адресом с действием и контроллером указанный: http: // localhost/Multiweb/Home/HomeIndex –

+0

Я бы сделал, как сказал @UbiquitousDevelopers, и это должно работать нормально. Один улов - это ''/Scripts/.... "' зависит от структуры вашей папки. Просто перетащите файл js в свое представление и проверьте путь, который он генерирует, и используйте тот же путь в 'src'. Или просто попробуйте использовать '@ Scripts.Render (" ~/Scripts/toastr/toastr.js ")', хотя '@ Scripts.Render' предназначен для объединения целей. – Developer

ответ

0

Я не уверен, если я нашел решение, или просто устранили эту вещь и перепутались другие вещи, но, как предложил here я написал этот код global.asax:

protected void Application_BeginRequest() 
    { 

     Context.Items["IIS_WasUrlRewritten"] = false; 
    } 

Он говорит здесь что нотация Tilde (~) сопоставляется с исходными URL-адресами с использованием перезаписи URL-адреса IIS в веб-страницах ASP.NET Razor V3. В случае, если URL не будет работать в будущем здесь есть объяснение:

Эта проблема возникает потому, что поведение тильда записи в URL-адресов является изменены в веб-страницы Razor V3 для совместимости с ASP.NET MVC. В ASP.NET MVC, нотация тильды в методе Url.Content или метод Html.ActionLink создает исходные URL-адреса независимо от правил перезаписи URL-адресов 1.

Однако в веб-страницах Razor V2 тильдальная нотация в URL-адресах сопоставляется с перезаписанными URL-адресами , когда включен модуль перезаписи URL-адреса IIS. Для примера , когда запросы под content.asp.net переписаны на адрес в asp.net/content/, атрибут href в разрешен/content/book /. В веб-страницах Razor V3 тот же самый атрибут href переведен в/book /, который является исходным URL-адресом в браузере .

Было лучше в бритве v2, чем в бритве v3?

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