Мой первый пост...
Когда я использую RedirectToAction, url в браузере не меняется. Как я могу этого добиться?
Я перехожу на ASP.NET MVC 3.0 (также использую jQuery Mobile) после 10+ лет использования веб-форм. Я уже около 8 недель в этом, и после нескольких книг и поиска ответа в Google, я не могу найти ответ.
У меня есть один маршрут, определенный в Global.asax:
routes.MapRoute(
"Routes",
"{controller}/{action}/{id}",
new { controller = "Shopping", action = "Index", id = UrlParameter.Optional }
У меня есть ShoppingController с такими действиями:
public ActionResult Cart() {...}
public ActionResult Products(string externalId) {...}
[HttpPost]
public ActionResult Products(List<ProductModel> productModels)
{
// do stuff
return RedirectToAction("Cart");
}
url, когда я делаю get и post (причем post имеет RedirectToAction) всегда:
/Shopping/Products?ExternalId=GenAdmin
После post и RedirectToAction я хочу, чтобы url в браузере изменился на:
/Shopping/Cart
Я пробовал Redirect, и RedirectToRoute, но получаю те же результаты.
Любая помощь будет очень признательна.
[Update] Я обнаружил, что виновником здесь являются посты jQuery Mobile AJAX. Если я отключу AJAX в jQuery Mobile, все работает.
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
// do not handle links via ajax by default
$(document).bind("mobileinit", function () { $.mobile.ajaxEnabled = false; });
</script>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0rc2/jquery.mobile-1.0rc2.min.css" />
Порядок вышеуказанных скриптов важен. Мне пришлось сначала включить сценарий для jQuery, затем включить сценарий для отключения использования AJAX в jQuery Mobile, а затем включить сценарий для jQuery Mobile.
Я все еще хотел бы найти способ использовать AJAX и заставить url обновляться должным образом. Или, по крайней мере, иметь возможность вызвать сообщение "loading" jQuery Mobile (или создать свое собственное).