I 100% concorda con la risposta generica di RedFilter, ma desiderava pubblicare in modo specifico un codice rilevante per ASP.NET MVC.
È possibile utilizzare lo Post/Redirect/Get (PRG) Pattern per risolvere il problema del doppio postback.
Ecco un'illustrazione grafica del problema:

ciò che accade è quando l'utente preme rinfrescano, il browser tenta di inviare di nuovo l'ultima richiesta fatta. Se l'ultima richiesta era un post, il browser tenterà di farlo.
maggior parte dei browser sanno che questo non è in genere ciò che l'utente vuole fare, quindi vi chiederà automaticamente:
Chrome - La pagina che stai cercando di accedere utilizzava informazioni inserite. Ritornare a quella pagina potrebbe causare la ripetizione di qualsiasi azione eseguita. Vuoi continuare?
Firefox - Per visualizzare questa pagina, è necessario che Firefox invii informazioni che ripeteranno qualsiasi azione (ad esempio una ricerca o una conferma dell'ordine) eseguita in precedenza.
Safari - Sei sicuro di voler inviare nuovamente un modulo? Per riaprire questa pagina, Safari deve inviare di nuovo un modulo. Ciò potrebbe comportare acquisti, commenti o altre azioni duplicati.
Internet Explorer - Per visualizzare nuovamente la pagina Web, il browser Web deve inviare nuovamente le informazioni inviate in precedenza. Se si effettuava un acquisto, è necessario fare clic su Annulla su per evitare una transazione duplicata. Altrimenti, fare clic su Riprova per visualizzare nuovamente la pagina Web .
Ma il modello PRG consente di evitare tutto questo inviando al client un messaggio di reindirizzamento in modo che quando la pagina viene finalmente visualizzata, l'ultima richiesta eseguita dal browser è stata una richiesta GET per la nuova risorsa.
Ecco uno great article on PRG che fornisce un'implementazione del modello per MVC. È importante notare che si desidera ricorrere a un reindirizzamento solo quando viene eseguita un'azione non idempotent sul server. In altre parole, se hai un modello valido e in effetti hai persistito i dati in qualche modo, è importante assicurarsi che la richiesta non venga inviata per errore due volte. Ma se il modello non è valido, la pagina corrente e il modello devono essere restituiti in modo che l'utente possa apportare le modifiche necessarie.
Ecco un controller esempio:
[HttpGet]
public ActionResult Edit(int id) {
var model = new EditModel();
//...
return View(model);
}
[HttpPost]
public ActionResult Edit(EditModel model) {
if (ModelState.IsValid) {
product = repository.SaveOrUpdate(model);
return RedirectToAction("Details", new { id = product.Id });
}
return View(model);
}
[HttpGet]
public ActionResult Details(int id) {
var model = new DetailModel();
//...
return View(model);
}
si può ottenere più risposte, se si etichetta come indipendente dal linguaggio, come non è solo ASP.NET MVC a essere interessato, ma tutte le lingue e i framework interagiscono con i moduli Web. (Naturalmente, si potrebbe ottenere il codice se si lascia il tag ASP.NET MVC lì). – Macha