Как предотвратить несколько постов на MVC3? - PullRequest
5 голосов
/ 03 мая 2011

Пользователь хочет опубликовать в своем блоге, он заполняет поле и нажимает submit.

Сайт работает медленно, он кликает снова и снова, и снова.

Это было наконец сохранено, но теперь он проверяет свои сообщения и видит 4 сообщений.

Как я могу предотвратить это? Если пользователь щелкает, чтобы отправить один раз, я хочу do nothing для следующих кликов или abort previous и начать новое сообщение, в зависимости от того, что имеет больше смысла или является рекомендуется.

В форме с

@using (Ajax.BeginForm(...))
{
}

Ответы [ 4 ]

17 голосов
/ 03 мая 2011

Самый простой способ добиться этого - отключить кнопки отправки после нажатия.

Добавьте следующий javascript (jQuery) к вашему представлению:

$(function () {
    $('input[type="submit"]').click(function() {
        $(this).attr('disabled', 'disabled');
    });
});

Не забудьте включить кнопки после завершения ajax-запроса, если необходимо:

$('input[type="submit"]').removeAttr('disabled');

UPDATE:

Лучше отключить кнопку отправки в обработчике отправки форм, поскольку пользователь может отправить форму, нажав кнопку ввода:

$(function () {
    $('form').submit(function() {
        $('input[type="submit"]', this).attr('disabled', 'disabled');
    });
});
3 голосов
/ 03 мая 2011

Существует много решений.

Одним из них является создание случайного GUID с формой в виде скрытого поля, которое вставляется в базу данных вместе с постом.Перед вставкой проверяется, существует ли уже GUID.

В качестве альтернативы вы можете использовать реальное свойство, например DateTime (которое отправляется на стороне клиента в качестве скрытого поля) или «Заголовок сообщения».

0 голосов
/ 24 июля 2013

Мой голос за ActionFilters. Это сообщение в блоге содержит код, который можно добавить в ваш проект и украсить ваши действия.

0 голосов
/ 03 мая 2011

Как насчет минуты, когда пользователь нажимает на ссылку действия для области публикации, в которой вы создаете реальное сообщение, но настраиваете его "Статус" для черновика?После добавления InsertOnSubmit () публикация немедленно перенаправляет на действие, которое вы извлекаете и редактируете.Это происходит так быстро, что пользователь не заметит.Поэтому, если сайт работает медленно и он нажимает кнопку «Отправить» несколько раз, вы не будете создавать новые записи, просто сохраняя их в одной записи.Я использовал процесс в списке задач, над которым я работаю.См. Приведенный ниже код.

Лучший список задач Контроллер билетов

Возможно, это не самое причудливое решение, но оно может привести вас к более творческому решению, которое работает для вас.

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