- скажем, у меня есть ссылка на действие на странице (назовем ее MainPage).
- Actionlink указывает на метод действия, который возвращает View (давайте назовем его PopupView).
- И скрипт на главной странице document.ready() говорит: «прикрепите плагин colorbox к элементу actionlink, чтобы, когда пользователь нажимает на него, открывался PopupView».
PopupView имеет форму:
@using (Html.BeginForm("SavePopupData", "Home", FormMethod.Post))
Также PopupView переопределяет поведение отправки по умолчанию:
$("form[action$='SavePopupData']").submit(function () { $.ajax({ url: $(this).attr("action"), contentType: 'application/json; charset=utf-8', type: "POST", success: function (data, textStatus, jqXHR) { alert('success!'); }, complete: function (jqXHR, textStatus) { alert('complete!') }, data: JSON.stringify(someData), dataType: "json", error: function (jqXHR, textStatus, errorThrown) { alert(textStatus); } }); return false; }
Давайте посмотрим, что находится в методе действия SavePopupData:
[HttpPost] public ActionResult SavePopupData(SomeDataType someData) { bool result = _dal.SavePopupData(someData); return new JsonResult { Data = result }; }
Теперь здесь все работает как задумано. Ну, почти все. on Submit, если вы поставите точку останова на метод действия SavePopupData, вы увидите, что данные благополучно попадают на сервер, хорошо анализируются и _dal возвращает результат. И все работает нормально.
Но когда он возвращается к клиенту, обратный вызов success никогда не запускается, а предупреждает в обратном вызове error об ошибке синтаксического анализа.
Как ни странно, если вы оставите все как есть и избавитесь только от элементов colorbox, это сработает. Хотя он откроет форму в новом окне (чего я не хочу).
Что происходит с включенным colorobox? Технически он создает всплывающее окно как часть страницы MainView. Я даже не могу отладить скрипт PopupView, потому что ни Firebug, ни инструменты разработчика Chrome его не распознают, а в списке скриптов такого скрипта нет. Тем не менее, во время выполнения он все еще работает.
Ребята, вы хоть представляете, что это может быть? Я думаю, что это может быть как-то связано с context в $.ajax. Но что я должен передать в него, я не знаю. Помоги мне, пожалуйста