MVC контроллер вызывается дважды - PullRequest
30 голосов
/ 01 мая 2010

У меня есть контроллер, который вызывается дважды из вызова 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
);

Это никак не повлияло на создание более симпатичной ссылки.

Я не уверен, куда идти отсюда.

Ответы [ 13 ]

0 голосов
/ 30 сентября 2016

Моя проблема была решена, убедившись, что я не использовал двойные ссылки на мои JavaScript файлы, которыми я был.

Это приводило к тому, что действие нажималось дважды, когда я нажимал на ссылку.

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

Я заметил, что в одном из моих Partial Views я говорил ему использовать главную страницу макета, которая содержала сценарии, которые отвечали за то, что произошло, когда я нажимал на ссылки. Поэтому я исправил это, просто установив layout = null;, так как в любом случае это частичное представление, которое уже загружается внутри основного макета.

0 голосов
/ 02 августа 2016

У меня была такая же проблема, и я проверил все возможные предложения, но не повезло, тогда я заметил следующее предупреждение JS на моей консоли.

Синхронный запрос XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя.Для получения дополнительной помощи, проверьте https://xhr.spec.whatwg.org/.

xmlHttp = new XMLHttpRequest();

Я исправил это, и это работает для меня.

Позаботьтесь обо всех ваших js ошибках и предупреждающие сообщения .

Это может кому-то помочь.

0 голосов
/ 01 сентября 2015

Я тоже столкнулся с той же проблемой. После тщательной проверки моего проекта я не нашел ни одного такого пустого эталонного случая. Тогда я узнал, что это вызвано FireBug. Отключение firebug или использование другого браузера, в котором не было установлено firebug, решило проблему.

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