Tengo un tablero que comienza en un estado en blanco/predeterminado. Le doy al usuario la capacidad de cargar un estado guardado en el tablero. Cuando hacen clic en el botón 'Aplicar' Me ejecute el código siguiente:Solicitado para confirmar la reenvío de formularios en las actualizaciones después de la devolución de datos. ¿Qué estoy haciendo incorrectamente?
function CloseAndSave() {
var radUpload = $find(radUpload1ID);
var inputs = radUpload.getFileInputs();
if (inputs[0].value.length == 0) {
alert('Please select a dashboard to upload.');
return;
}
if(!radUpload.isExtensionValid(inputs[0].value)) {
alert('Please select an XML file.');
radUpload.clearFileInputAt(0);
return;
}
oWindow = null;
__doPostBack(radButton1ID);
}
protected void RadButton1_Click(object sender, EventArgs e)
{
if (RadUpload1.UploadedFiles.Count > 0)
{
UploadedFile dashboardXMLFile = RadUpload1.UploadedFiles[0];
SerializableDictionary<string, string> dataToLoad = new SerializableDictionary<string, string>();
XmlSerializer xmlSerializer = new XmlSerializer(dataToLoad.GetType());
using (StreamReader reader = new StreamReader(dashboardXMLFile.InputStream))
{
dataToLoad = (SerializableDictionary<string, string>)xmlSerializer.Deserialize(reader);
}
foreach (var entry in dataToLoad)
{
string sessionKey = entry.Key;
if (!string.IsNullOrEmpty(entry.Value))
{
Type type = StateManager.GetTypeFromStateName(sessionKey);
byte[] data = Convert.FromBase64String(entry.Value);
using (MemoryStream memoryStream = new MemoryStream(data))
{
xmlSerializer = new XmlSerializer(type);
SessionRepository.Instance.SetSession(sessionKey, xmlSerializer.Deserialize(memoryStream));
}
}
}
}
}
RadButton1 tiene la propiedad "AutoPostBack" se pone a falso. He configurado AutoPostBack en falso porque quería realizar la validación antes de ejecutar el evento de clic. Entonces, ahora realizo la validación del lado del cliente y luego dejo que el clic del botón se ejecute.
No hay ningún panel de actualización que ajuste RadButton1. Como tal, toda la página se publica después de RadButton1_Click. Esto hace que el estado de la página 'cargue' el estado analizado.
En este punto, si actualizo la página, Google Chrome dice "Confirme la nueva presentación del formulario". He leído sobre cómo silenciar esto, pero prefiero rastrear la causa raíz.
Solución:
//This changes the response to a GET instead of a POST. Prevents the 'Form Resubmission' dialog.
Page.Response.Redirect(Page.Request.Url.ToString(), true);
Cada vez que se envía una página mediante un formulario POST, la actualización de la página con el botón del navegador (F5 o lo que sea) le avisará (debería). Ese es un comportamiento normal. Debe silenciarlo porque la causa principal es el comportamiento habitual del navegador, que está destinado a evitar la remisión accidental de formularios que REALMENTE HACEN algo como enviar un pago. – Nikki9696
Creo que si estos datos vuelven a enviarse en silencio, sucederán cosas malas. Necesito encontrar una manera de borrar los datos POST después de que ocurra. Estoy leyendo sobre PRG actualmente. –