ASP.NET MVC называется дважды - PullRequest
       37

ASP.NET MVC называется дважды

19 голосов
/ 17 ноября 2009

У меня есть конкретное действие контроллера, которое вызывается дважды, что, помимо того, что оно странно, вызывает проблемы с одноэлементной частью моего приложения (на самом деле это не проблема, оно просто обратило мое внимание на двойной вызов).

Есть идеи, почему действие контроллера будет выполняться дважды каждый раз?

Ответы [ 10 ]

25 голосов
/ 17 ноября 2009

Не возвращает false или предотвращает действие по умолчанию для события в обработчике кликов JavaScript по ссылке, которая выполняет вызов через AJAX. В этом случае также будет выполнено действие по умолчанию для ссылки (т. Е. Публикация без AJAX на тот же URL-адрес).

Ex.

<%= Html.ActionLink( "action", "controller" ) %>


$(function() {
   $('a').on('click', function(e) {
      // solve with "e.preventDefault();" here
      var href = $(this).attr('href');
      $.get(href, function() { ... });
      // or solve with "return false;" here to prevent double request
   });
}):
12 голосов
/ 21 октября 2014

У меня была похожая проблема. Проблема была вызвана этой строкой в ​​моем файле _Layout.cshtml:

<link rel="shortcut icon" href="">

После удаления вышеуказанной строки мои действия вызываются один раз.

7 голосов
/ 29 ноября 2014

Очень поздно, но я обнаружил, что, имея

<img id="myLogo" src="#"/> 

заставил это сделать вызов снова. Надеюсь, это кому-то поможет, причина, по которой я не уверен.

Нашли решение здесь. http://skonakanchi.blogspot.com/2011/09/action-method-calling-twice-in-aspnet.html

6 голосов
/ 15 июля 2015

Уже поздно, но, возможно, это кому-нибудь поможет.

Моя проблема была похожей (метод контроллера сработал бы один раз при начальной загрузке, а затем сработал бы снова сразу же асинхронно).

Я смог проверить объект HttpContext.request и определил, что второй запрос был связан с функцией Visual Browser в Visual Studio.

Я отключил Browser Link, и таинственный вызов ajax для моего метода контроллера больше не происходит.

Как отключить ссылку браузера

1 голос
/ 27 ноября 2017

При использовании сетки кендо эта проблема произошла. использовать параметр сетки Автосвязывание (false) ..

1 голос
/ 19 ноября 2016

В моем конкретном случае это была загрузка файла jquery.unobtrusive-ajax.min.js дважды.
Это было причиной $(document).ready(function() { }); функция будет выполнена два раза.

Надеюсь, это полезно.

0 голосов
/ 24 декабря 2018

В моем контроллере метод A вызывает метод B. Было очевидно, что они вызывались дважды. Я подтвердил это, написав в окне вывода. Интересно, что сказано:

Method A was called.
Method A was called.
Method B was called. 
Method B was called.

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

В любом случае, проблема связана с jquery.form.js. Я использую его для включения загрузки файлов AJAX.

В документации сказано, что при инициализации подключения jquery.form.js к вашей HTML-форме во время $ (document) .ready () вы можете добавить опцию, называемую «url». Если вы этого не сделаете, по умолчанию используется ДЕЙСТВИЕ вашей формы.

Я полагался на значение по умолчанию и получал двойные вызовы.

Проблема исчезла, когда я добавил опцию url и удалил действие из тега формы.

0 голосов
/ 28 июня 2018

У меня была похожая проблема. Проблема была вызвана этой строкой в ​​частичном файле view.cshtml:

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

после удаления исправлено.

0 голосов
/ 23 февраля 2017

Моя проблема заключалась в том, что я случайно включил recaptcha/api.js форму файла google дважды . Один в BaseLayout и один в представлении.

0 голосов
/ 17 мая 2016

Удалить недопустимый аргумент из вида

public ActionResult Edit(int? id)

до

public ActionResult Edit(int id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...