Предотвратить повторную обратную передачу в ASP.Net (C #) - PullRequest
7 голосов
/ 27 августа 2010

Простой здесь ... есть ли чистый способ запретить пользователю двойной щелчок по кнопке в веб-форме и, таким образом, вызвать дублирование событий?

Если бы у меня была форма комментария, напримери пользователь вводит «это мой комментарий» и нажимает кнопку «Отправить», комментарий показан ниже ... однако, если они дважды щелкают, тройной щелчок или просто сходят с ума на клавиатуре, это может привести к публикации нескольких версий.

На стороне клиента Я мог бы довольно легко отключить кнопку onclick - но я предпочитаю решения на стороне сервера таким вещам, как это:)

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

Спасибо

Ответы [ 7 ]

2 голосов
/ 27 августа 2010

Я не думаю, что вы должны загружать сервер для таких тривиальных задач, как эти. Вы можете попробовать что-нибудь вроде решения jquery UI, например this one. Инструментарий Microsoft Ajax также должен иметь некоторый контроль, который делает то же самое. Я использовал его давным-давно, кажется, не могу вспомнить имя элемента управления, хотя.

2 голосов
/ 27 августа 2010

С помощью jQuery вы можете использовать событие one .

Еще одно интересное прочтение: Создание страниц ASP.NET на более богатой основе .

1 голос
/ 27 августа 2010

Установите переменную сеанса, когда пользователь заходит на страницу, как Session ["FormXYZSubmitted"] = false.Когда форма отправлена, проверьте эту переменную, например

if((bool) Session["FormXYZSubmitted"] == false) {
   // save to db
   Session["FormXYZSubmitted"] = true;
}
0 голосов
/ 23 августа 2013

На стороне клиента может быть сложно, если вы используете проверку Asp.Net.

Если у вас есть главная страница, поместите ее на главную страницу:

 void IterateThroughControls(Control parent)
    {
        foreach (Control SelectedButton in parent.Controls)
        {
            if (SelectedButton is Button)
            {
                ((Button)SelectedButton).Attributes.Add("onclick", " this.disabled = true; " + Page.ClientScript.GetPostBackEventReference(((Button)SelectedButton), null) + ";");
            }

            if (SelectedButton.Controls.Count > 0)
            {
                IterateThroughControls(SelectedButton);
            }
        }
    }

Затем добавьте это вглавная страница Page_Load:

IterateThroughControls(this);
0 голосов
/ 27 августа 2010

В зависимости от того, насколько это важно для вас, можно создать массив одноразовых идентификаторов GUID, которые вы удаляете из массива после обработки обновления (т. Е. Отправляете обратно в viewstate / скрытое поле)

Если guid отсутствует в массиве при обратной передаче, запрос недействителен.

Замена таблицы базы данных для массива в кластерной среде.

0 голосов
/ 27 августа 2010

Отключите кнопку при нажатии, используйте набор инструментов jquery или microsoft ajax.

0 голосов
/ 27 августа 2010

У меня был такой же сценарий. Решение одного из моих коллег состояло в том, чтобы внедрить некий таймер в Javascript, чтобы не рассматривать второй щелчок как щелчок.

Надеюсь, это поможет,

...