Невозможно определить, почему URL-адрес не включает папку приложения в IIS

#model-view-controller #asp.net-mvc-2

#model-view-controller #asp.net-mvc-2

Вопрос:

Предположим, что приложение физически расположено в:

 C:inetpubwwwrootMyApplication
  

Это было преобразовано в приложение через IIS 7.5, и теперь я могу получить доступ к приложению через…

 http://localhost/MyApplication 
  

… поскольку он будет использовать маршрут по умолчанию. Если я вызову…

 http://localhost/MyApplication/MyRequest
  

… задействован тот же маршрут, и отображается соответствующая страница. Проблема в том, что вышеупомянутый URL-адрес является формой, и после отправки этой формы я вызываю действие в том же Controller , но не перенаправлен соответствующим образом. Результирующий URL-адрес…

 http://localhost/MyRequest/MyMethod
  

против…

 http://localhost/MyApplication/MyRequest/MyMethod
  

Единственный маршрут в приложении…

     routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
  

Это проблема с маршрутизацией? JS (jQueryUI и т. Д.), Который находится в папке Scripts, Также не загружается, как будто все настроено на проживание на корневом уровне в иерархии, и добавление в папку MyApplication в IIS привело к зацикливанию.

Обновить:

Определение формы выглядит следующим образом…

 <form class="..." action="/Request/Add" method="post" id="requestForm">
  

Ответ №1:

Бьюсь об заклад, у вас есть жестко запрограммированные URL-адреса в ваших представлениях и сценариях вместо использования помощников.

Например, в отношении CSS, вместо того, чтобы жестко кодировать его следующим образом:

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

используйте помощники URL:

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

и что касается ваших HTML-форм и привязок, всегда используйте HTML helper для их создания:

 <% using (Html.BeginForm()) { %>
    ...
<% } %> 
  

и в отношении ваших файлов javascript абсолютно никогда не вводите какие-либо URL-адреса, подобные этому:

 $.ajax({
    url: '/foo/bar',
    ...
});
  

При работе с URL-адресами в ASP.NET Приложение MVC. Теперь, независимо от того, где размещено ваше приложение и как выглядят ваши маршруты, оно будет работать.


Обновить:

И теперь, увидев ваше обновление, вместо жесткого кодирования ваших форм:

  <form class="..." action="/Request/Add" method="post" id="requestForm">
  

для их создания следует использовать помощники html:

 <% using (Html.BeginForm("Add", "Request", null, FormMethod.Post, new { id = "requestForm", @class = "foo" })) { %>
    ...
<% } %> 
  

Комментарии:

1. Я имел в виду JS (jQueryUI), а не CSS … CSS загружается так, как должен, через «../Content/Site.css», тогда как JS — нет, src =»../Scripts/jquery-ui-1.8.16.custom.min.js »

2. @Aaron McIver, абсолютно никогда не пишите ничего подобного в ASP.NET Применение MVC: <script src="../Scripts/jquery-ui-1.8.16.custom.min.js" type="text/javascript"></script> . Абсолютно всегда используйте помощники URL: <script src="<%= Url.Content("~/Scripts/jquery-ui-1.8.16.custom.min.js") %>" type="text/javascript"></script>

3. Кроме того, после просмотра вашего обновления кажется, что вы жестко action запрограммировали атрибут вашей формы. Это абсолютно неверно. Никогда не вводите жесткие URL-адреса в ASP.NET Приложение MVC. Всегда используйте помощников.

4. Понятно. Предполагая, что я хотел использовать относительный жестко закодированный путь, чтобы заставить то, что у меня есть в настоящее время, работать, где бы я это сделал? Относительный путь CSS работает, но скрипты этого не делают, вот чего мне не хватает.

5. @AaronMcIver, используйте помощники url / html каждый раз, когда вам нужно использовать URL. Смотрите Мое обновление о форме.