Конфликт между ненавязчивым ajax и jQuery

У меня есть проект MVC4, в котором я использовал NuGet для установки jQuery 3.1.0 и Microsoft.jQuery.Unobtrusive.Ajax 3.2.3. Мой комплект такой:

bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
            "~/Scripts/jquery-3.1.0.min.js",
            "~/Scripts/jquery.unobtrusive-ajax.min.js",
            "~/Scripts/jquery.hoverIntent.minified.js",
            "~/Scripts/newScript.js",
            "~/Scripts/nav.js"
            ));

У меня есть представление, содержащее такой блок Ajax.BeginForm:

@using (Ajax.BeginForm("ValidateBASFID", new AjaxOptions { UpdateTargetId = "ValidateBASFIDError", InsertionMode = InsertionMode.Replace }))
{
    <label class="required">BASF ID</label>@Html.ValidationMessageFor(model => model.BASFID, "", new { @class = "text-danger" })
    @Html.TextBoxFor(model => model.BASFID, new { style = "width: 50px; margin-right:20px; float:left;", @class = "form-control" })
    <input type="submit" value="Validate with BASF ID" class="smallButton" style="float:left;" />
    <div id="ValidateBASFIDError" class="validationError text-danger"></div>
    <div style="clear:both;"></div>
}

Этот блок указывает на такое действие контроллера:

public ActionResult ValidateBASFID(string BASFID)
{
    Models.Repositories.SectionRepository _repository = new Models.Repositories.SectionRepository();
    MemberVM Member = _repository.ValidateBASFID(BASFID);

    if (Member != null)
    {
        Member.SaveMemberInfo();

        return RedirectToAction("Sections", new
        {
            SectionSignupMasterID = Member.SectionSignupMasterID,
            VerificationEmail = Member.Email,
            MemberName = Member.FullName
        });
    }
    else
    {
        ViewBag.Message = "Invalid BASF ID";
        return PartialView("_ValidationError");
    }
}

Идея состоит в том, что я буду использовать AJAX для отправки значения идентификатора и его проверки. Если идентификатор действителен, я перенаправляюсь в представление «Разделы». Если идентификатор недействителен, возвращается сообщение об ошибке.

Что происходит, так это то, что действительный идентификатор перенаправляет на представление «Разделы», но страница не появляется. Отображается только год. Просто написано "2016" в верхнем левом углу страницы. Страница также зависла, пытаясь получить изображение из другого домена.

Если я прокомментирую только ненавязчивый ajax из пакета, перенаправление просмотра работает нормально (но я не могу вернуть сообщение об ошибке, если идентификатор недействителен). Если я прокомментирую только jQuery из пакета, перенаправление представления работает нормально (но другой код на стороне клиента не работает).

Почему эти две библиотеки сценариев плохо работают вместе или что я могу сделать, чтобы получить больше информации о том, что здесь происходит? Спасибо.


person BKahuna    schedule 31.07.2016    source источник
comment
Вы делаете ajax все. Весь смысл ajax в том, чтобы оставаться на той же странице. Они никогда не перенаправляют. Сделайте нормальную отправку, и если есть ошибка, добавьте ModelStateError и верните представление   -  person    schedule 01.08.2016


Ответы (1)


Стивен прав. Я немного поиграл с кодом и обнаружил, что все представление Sections пытается загрузиться в цель ajax.beginform. Это не удалось из-за какого-то javascript внизу страницы, но Ajax не для перенаправления.

Причина, по которой это сработало, когда я закомментировал ненавязчивую библиотеку или jQuery, заключалась в том, что я ломал ajax, а он просто выполнял стандартную обратную передачу.

ОБНОВЛЕНИЕ: я нашел сообщение здесь также Стивен, который решил мою проблему.

person BKahuna    schedule 01.08.2016