MVC5 Ajax.ActionLink загружает новую страницу вместо замены - PullRequest
0 голосов
/ 26 января 2019

Я знаю, что подобные вопросы задавались и отвечали несколько раз; из-за своей жизни я не могу определить, чего мне не хватает, пожалуйста, потерпите меня.

Я пытаюсь загрузить частичное представление с помощью редактора для элемента на странице и отображать этот редактор в качестве модального загрузчика, но он всегда загружается на новую страницу.

_Layout.cshtml ссылается на пакет jQuery:

@Scripts.Render("~/bundles/jquery")

`BundleConfig.RegisterBundles () добавляет jQuery и ненавязчивый ajax:

bundles.Add(new ScriptBundle("~/bundles/jquery")
    .Include("~/Scripts/jquery-{version}.min.js") // <-- must come first
    .Include("~/Scripts/jquery.unobtrusive-ajax.min"));

Папка Scripts содержит оба файла:

Scripts Folder screenshot showing both files

В View есть пустой div с правильным id для получения содержимого

<div id="editor"></div>

Я построил ActionLink таким образом:

@Ajax.ActionLink(linkText: "Edit",
    actionName: "GetEditor",
    routeValues: new {id = Model.Id},
    ajaxOptions: new AjaxOptions
    {
        OnSuccess = "showEditor",
        UpdateTargetId = "editor",
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "POST"
    })

Моя функция JS просто показывает модальное значение:

function showEditor() { $("#editor").modal("show"); };

... и чтобы посмотреть, смогу ли я заставить его работать, я возвращаю простую строку из моего контроллера:

public ActionResult GetEditor(string id) => Content("Success");

Редактировать 1

В моем файле web.config я включил как проверку на стороне клиента, так и ненавязчивую js:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

Редактировать 2

Я попытался обновить без использования кэша (Ctrl+F5) с тем же результатом, и инструменты dev не показывают ошибок JavaScript. Я получаю одинаковые результаты во всех браузерах.

Что я забыл?

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Вы включили его в web.config?

<configuration>
    <appSettings>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

РЕДАКТИРОВАТЬ: Или включили его через помощника HTML

HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
0 голосов
/ 27 января 2019

Оказывается, я просто идиот:

Я попытался добавить ненавязчивую библиотеку проверки вручную:

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

... и она начала работать.Затем я подумал, что, возможно, что-то не так с пакетом - хотя я очень тщательно следил за тем, чтобы библиотеки были в правильном порядке ....

bundles.Add(new ScriptBundle("~/bundles/jquery")
  .Include("~/Scripts/jquery-{version}.min.js") 
  .Include("~/Scripts/jquery.unobtrusive-ajax.min"));  // <--- what's missing?

Оказывается, требуются полные имена для файлов javascript.

0 голосов
/ 26 января 2019

Попробуйте использовать

Ctrl + F5

Чтобы обновить страницу и повторите попытку.

Для Chrome возможно кэширование ваших связанных ресурсов.

Нажмите F12 и посмотрите, существует ли какая-либо ошибка JavaScript, и исправьте ее, если таковая имеется.

Попробуйте вернуть PartialView как результат действия C #.

...