Рассмотрим следующий код (он основан на проекте EMPTY MVC3 по умолчанию, созданном в Visual Web Developer Express 2010sp1):
_Layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>
<body>
<div id="header">header</div>
<div id="main">@RenderBody()</div>
</body>
</html>
Метод индекса HomeController:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
{
ViewBag.Message = "partial";
return PartialView();
}
else
{
ViewBag.Message = "full";
return View();
}
}
Index.cshtml:
<script type="text/javascript">
$(function () {
$('#myLink').click(function () {
$.post(this.href, function (result) {
$('#main').html(result);
alert(result);
});
return false;
//$('#main').load(this.href);
//return false;
});
});
</script>
HomeController index. @ViewBag.Message
@Html.ActionLink("Index", "Index", new { controller = "Home" }, new { id = "myLink" } );
Проблема в том, что в IE8 при щелчке по ссылке myLink он не обновляет основной div только частичным html из Index.cshtml, а полным html, включая макет. Конечно, он хорошо работает в FF, я имею в виду, почему не должно быть правильно? Кажется, Request.IsAjaxRequest () всегда оценивается как ложное в IE8. Я понимаю, что это результат того, что заголовок X-Requested-With
не прикреплен к запросу в IE8. У меня нет большого опыта в веб-разработке - это общая проблема и как (лучше) решить эту проблему?
UPDATE:
Вчера у меня все нормально работало в IE8, но когда я попробовал это сегодня утром, та же проблема вернулась. Теперь я не думаю, что это больше связано с настройками в IE8, так как я восстановил настройки до значений по умолчанию. Я попытался изучить запрос с помощью инструмента Fiddler. Для того чтобы я мог захватывать трафик с localhost
с помощью fiddler, я добавил точку по адресу: http://localhost.:3157/
. Так что теперь ошибка возникает только тогда, когда я использую http://localhost.:3157/
(с точкой), и она работает нормально, когда я использую http://localhost:3157/
(без точки). Я дополнительно протестировал поведение в Chrome, Opera и Safari - ссылка ajax работает нормально в этих браузерах. Обратите внимание, что я могу заставить его работать нормально в IE8, когда я присоединяю параметр запроса к ссылке ajax, например:
@Html.ActionLink("Index", "Index", new { controller = "Home", param = "param" }, new { id = "myLink" } )
Я действительно не хочу этого делать. У меня кончаются идеи здесь. Я, вероятно, упускаю что-то, что является очевидным для опытного веб-разработчика =] Кто-нибудь распознает эти симптомы?