#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. Смотрите Мое обновление о форме.