我有一个仪表板,起始状态是空白/默认状态。我希望用户能够将已保存的状态加载到仪表板中。当他们点击'应用'按钮时,我会运行以下代码:
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的属性“AutoPostBack”被设置为false。我将AutoPostBack设置为false是因为我想在运行点击事件之前执行验证。所以,现在,我执行客户端验证,然后允许按钮点击运行。
没有更新面板包装RadButton1。因此,在RadButton1_Click后整个页面都会提交。这会导致页面状态“加载”分析状态。
此时,如果我刷新页面,Google Chrome会显示“请确认表单重新提交”。我已经阅读了如何消除它的方法,但我更愿意找出根本原因。
解决方案:
//This changes the response to a GET instead of a POST. Prevents the 'Form Resubmission' dialog.
Page.Response.Redirect(Page.Request.Url.ToString(), true);