2016-04-25 2 views
0

Я пытаюсь найти решение проблемы, с которой я сталкиваюсь с приложением ASP.NET (C#/MySQL Backend).ASP.NET предотвратить браузер 'назад'

Приложение использует веб-формы в многоэтапном мастере для вставки данных в базу данных SQL, различные шаги выполняются с помощью javascript, поэтому «submit» не выполняется до «последнего» шага. В определенных обстоятельствах, в любом случае, если пользователь нажимает кнопку «назад» браузера сразу после «последнего» шага, форма повторно представляется и SQL INSERT запускается снова, создавая обман оригинальной записи.

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

Я не хочу использовать javascript-трюки, чтобы отключить кнопку «Назад» по понятным причинам.

Основная проблема этого решения заключается в том, что он мне не очень-то нравится, и его также будет довольно сложно реализовать, так как мастера в форме приложения довольно четко сформулированы, и это может вызвать некоторые проблемы.

Есть ли «лучшая практика» для предотвращения таких проблем без создания сложных инфраструктур?

Я не размещаю код, потому что я думаю, что это будет вводить в заблуждение и не нужно.

С наилучшими пожеланиями, Майк

+0

Поскольку все браузеры предлагают кнопку назад, я считаю, что бесполезно пытаться работать против него , Нет никакого «официального» способа борьбы с этим, поэтому мой подход заключается в том, чтобы заставить веб-приложение справиться с этим. – Alexander

+0

Невозможно отключить кнопку браузера. Вы должны обрабатывать логику только в своем приложении. –

+0

@Piyush Khatri ... похоже, что вы ОБА НЕ читаете мой вопрос. Я не спрашиваю, как отключить кнопку «Назад» ... Я просто написал это. Реальный вопрос заключается в том, как определить стратегию для преодоления «повторных» проблем. Я уверен, что такая проблема может быть исправлена ​​без вмешательства в бизнес-логику. И я также уверен, что я не единственный пользователь ASP.NET, столкнувшийся с одной и той же проблемой, поэтому я могу предсказать, что кто-то определил ее прайтический способ преодолеть. – weirdgyn

ответ

0

Я нашел решение моей проблемы. Я думаю, что это может быть достаточно хорошей практикой для людей, сталкивающихся с одной и той же проблемой. Конечно, это не идеально, но, возможно, кто-то еще может усовершенствовать это как «идеальное решение».

Прежде всего в .aspx коде страницы запуска формы, которая дублирующая записи Я поместил это:

<asp:LinkButton 
    ID="_btnForm1" 
    runat="server" 
    OnCommand="Link_Command" 
    CommandArgument='<%#Eval("id","~/Form1.aspx?id={0}&step=Exit")%>'> 
    Form1 
</asp:LinkButton> 

В бэкэнде коде, который я создал hanlder для команды Link_Button:

protected void Link_Command(object sender, CommandEventArgs e) 
{ 
    Session["key"] = Guid.NewGuid().ToString().Replace("-", string.Empty); 

    Response.Redirect(e.CommandArgument.ToString()); 
} 

Короче говоря, он генерирует уникальный хэш-код, сохраняющий его как значение Session.

В форме управляющих записей я проверил значение Session["key"], а не null. Если ключ присутствует, код не достиг его важной части, тогда формы должны быть повторно отправлены без проблем.

Когда код достигает критической части (непосредственно перед вставкой данных в базу данных), я прояснил Session["key"] значение:

Session.Remove("key"); 

Затем, если пользователь пытается повторно отправить форму после критической части Session ключ ISN «т представить больше и код может подстерегать„аномалия“и появляется сообщение об ошибке или перенаправлять через другую страницу:

if (Session["key"] == null) 
{ 
     Response.Redirect("Error.aspx?script=" + HttpUtility.UrlEncode(Request.Path)); 
} 
Смежные вопросы