我有一個以空白/默認狀態開始的儀表板。我讓用戶能夠將已保存的狀態加載到儀表板中。當他們點擊「應用」按鈕,我運行下面的代碼:提示確認表單重新提交後重新提交。我做錯了什麼?
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,因爲我想在運行click事件之前執行驗證。所以,現在,我執行客戶端驗證,然後讓按鈕單擊運行。
沒有更新面板包裝RadButton1。因此,整個頁面發佈在RadButton1_Click之後。這會導致頁面狀態「加載」解析的狀態。
此時,如果我刷新頁面,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);
任何時候通過表單POST提交頁面,使用瀏覽器按鈕(F5或其他)將刷新頁面(應該)提示您。這是正常的行爲。您必須禁止它,因爲根本原因是普通的瀏覽器行爲,意圖防止意外重新提交表單,而這些表單實際上會執行某些操作,例如提交付款。 – Nikki9696
我認爲如果這些數據悄悄地重新提交,就會發生不好的事情。我需要找到一種方法來清除POST數據。我正在閱讀關於PRG的內容。 –