Ответ 1
Есть ли какая-либо другая разметка, которая может случайно ссылаться на страницу? Script ссылки, ссылки на изображения, ссылки css, все могут быть ошибочно указаны на '.' или текущей страницы.
У меня есть контроллер, который вызывается дважды из вызова ActionLink.
На моей домашней странице есть ссылка, которая при нажатии вызывает метод Index на контроллере Play. Идентификатор 100 передается в метод. Я думаю, что это является причиной проблемы. Подробнее об этом ниже.
Вот некоторые фрагменты кода:
Домашняя страница:
<%= Html.ActionLink("Click Me", "Index", "Play", new { id = 100 }, null) %>
Контроллер воспроизведения:
public ActionResult Index(int? id)
{
var settings = new Dictionary<string, string>();
settings.Add("Id", id.ToString());
ViewData["InitParams"] = settings.ToInitParams();
return View();
}
Просмотр воспроизведения:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
(html <head> omitted for brevity)
<body>
<form id="form1" runat="server" style="height:100%">
Hello
</form>
</body>
Если я избавлюсь от параметра метода Index, все будет хорошо. Если я оставлю параметр на месте, то вызывается метод Index с идентификатором 100. После возврата View метод вызывается второй раз с параметром null.
Кажется, я не могу понять, что вызывает второй звонок.
Моей первой мыслью было добавить конкретный маршрут, подобный этому:
routes.MapRoute(
"Play", // Route name
"Play/{id}", // URL with parameters
new {controller = "Play", action = "Index"} // Parameter defaults
);
Это не имело никакого эффекта, кроме создания привлекательной ссылки.
Я не уверен, куда идти отсюда.
Есть ли какая-либо другая разметка, которая может случайно ссылаться на страницу? Script ссылки, ссылки на изображения, ссылки css, все могут быть ошибочно указаны на '.' или текущей страницы.
10 часов преследуют эту ошибку в проекте Java Spring Maven.
Сначала на SELECT я думал, что Hibernate просто регистрировался дважды, но затем с INSERT я думал, что запросы вызывались дважды. Пройдя через код, который я обнаружил, контроллер дважды вызывался...
Пробовал всю возможную конфигурацию Spring, считая, что контекст был загружен дважды, или bean дважды повторялся...
В отчаянии перестроил проект по частям, чтобы, наконец, добавить фрагмент HTML и ошибки kaboom.
<img alt="" src="#" />
Резкий знак был виноват, перезагружая URL. Я знаю, что тема старая, но я обобщил свои поиски со словами, которые я тщетно искал в Интернете, чтобы найти ответ на ту же проблему! Может помочь другим...
Вы можете просмотреть код в своем представлении. Пройдите и посмотрите, откуда приходит второй вызов.
Во время отладки я узнал, что Partial View вызывает вызов контроллера во второй раз. Это отстой, но я не вижу работы вокруг этого.
должен быть html markeup, который не работает должным образом. проверьте все img tage. также проверьте
<link rel="icon" href="favicon.ico" type="image/x-icon" />
Попробуйте изменить int? id
на int id
. Это соответствует маршруту второй раз, потому что вы снова вызываете индекс с нулевым идентификатором.
Вы также можете попробовать изменить маршрут к этому.
routes.MapRoute(
"Play", // Route name
"Play/{id}", // URL with parameters
new { controller = "Play", action = "Index" , id = "" } // Parameter defaults
);
Что-то очень глупое, что у меня было... было 2 формы на странице с одной кнопкой на каждой форме. Я добавил script, чтобы отправить конкретную форму на основе нажатой кнопки, но поскольку действие по умолчанию кнопки в форме состоит в том, чтобы сделать submit, она дважды вызывала мое действие контроллера.: ^ (
$('#SaveButton').click(function (event) {
$("#AttendanceDetailForm").submit();
});
Я тоже столкнулся с той же проблемой. после тщательной проверки моего проекта, я не нашел такого пустого справочного примера. Затем я узнал, что это вызвано FireBug. Отключение firebug или использование другого браузера, у которого не установлен firebug, решила проблему.
У меня была такая же проблема, и я проверил все возможные предложения, но не повезло, но я заметил следующее предупреждающее сообщение JS на моей консоли.
Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубные последствия для конечного пользователя. Для получения дополнительной помощи проверьте https://xhr.spec.whatwg.org/.
xmlHttp = new XMLHttpRequest();
Я исправил это, и он работает для меня.
Позаботьтесь обо всех предупреждениях js и .
Это может помочь кому-то.
Моя проблема была решена, если я не был двойным ссылкой на мои файлы JavaScript
, которые я был.
Это вызвало двойное действие, когда я нажал ссылку.
Я знаю, что выше было сказано ранее, но я думал, что хочу отметить, что стоит проверить, загружаются ли ваши файлы дважды, особенно если вы используете Partial Views
.
Я заметил, что в одном из моих Partial Views
я говорил ему использовать главную страницу макета, в которой содержались сценарии, которые отвечали за то, что произошло, когда я нажал на ссылки. Поэтому я исправил это, просто установив layout = null;
, так как это частичный вид, и он уже загружается внутри основного макета.
В моем случае я использовал Partial View (т.е. теги формы) и использовал обработчик on-click в JQuery для вызова метода в контроллере через Ajax. Но я сказал, что кнопка, к которой был прикреплен обработчик, была прикреплена как тип Submit. Я забыл передать e в функцию моего обработчика, чтобы вызвать e.PreventDefault()!! Поэтому метод Controller вызывался дважды - один раз из ajax-вызова и один раз для Submit. Второй раз по параметрам был нулевым. Это вызвало у меня столько горя. Такая маленькая вещь. Такой маленький, что его легко упустить. Надеюсь, это поможет кому-то еще.
В моем случае было неправильно настроено удаленное script Yandex.metrika(аналог Google Analytics). Этот script был представлен на каждой странице, поэтому любой контроллер и любое действие вызывались дважды. Проверьте настройки Ya.metrika для более подробной информации.
Это старый вопрос, и некоторые ответы все еще полезны. Вот почему я добавляю новый ответ, надеясь, что это поможет кому-то еще. Для меня у меня есть приложение, которое перенаправляет пользователей назад и вперед между моими доменами. Из-за некоторых моих недавних работ, связанных с HttpCookie, я добавил строку кода ниже:
httpCookieObject.SameSite = SameSiteMode.Strict;
Оказывается, SameSiteMode.Strict вызывает проблемы, когда речь идет о схемах проверки подлинности между источниками. Это документация Microsoft об этом: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-2.2
Для строгого соблюдения политики SameSiteMode.Strict для одного и того же сайта установите MinimumSameSitePolicy. Хотя этот параметр нарушает OAuth2 и другие схемы аутентификации между источниками, он повышает уровень безопасности файлов cookie для других типов приложений, которые не зависят от обработки запросов между источниками.
Итак, мое решение состояло в том, что я не использую политику SameSiteMode.Strict, и я готов идти вперед.