Tôi có trang tổng quan bắt đầu ở trạng thái trống/mặc định. Tôi cho người dùng khả năng tải trạng thái đã lưu vào trang tổng quan. Khi họ nhấp vào nút 'Áp dụng', tôi chạy mã sau:Đã nhắc gửi lại biểu mẫu xác nhận khi làm mới sau khi đăng lại. Tôi đang làm gì sai?
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 có thuộc tính "Tự động khôi phục" được đặt thành sai. Tôi đã đặt AutoPostBack thành false vì tôi muốn thực hiện xác thực trước khi chạy sự kiện nhấp chuột. Vì vậy, bây giờ, tôi thực hiện xác nhận phía máy khách và sau đó cho phép bấm nút để chạy.
Không có bảng cập nhật gói RadButton1. Như vậy, toàn bộ trang đăng bài sau RadButton1_Click. Điều này làm cho trạng thái của trang 'tải lên' trạng thái được phân tích cú pháp.
Tại thời điểm này, nếu tôi làm mới trang, Google Chrome sẽ nói "Vui lòng xác nhận gửi lại biểu mẫu". Tôi đã đọc về làm thế nào để squelch này, nhưng tôi muốn theo dõi nguyên nhân gốc rễ.
Giải pháp:
//This changes the response to a GET instead of a POST. Prevents the 'Form Resubmission' dialog.
Page.Response.Redirect(Page.Request.Url.ToString(), true);
Bất kỳ lúc nào một trang được gửi bằng biểu mẫu POST, làm mới trang bằng nút trình duyệt (F5 hoặc bất kỳ thứ gì) sẽ (nhắc) nhắc bạn. Đó là hành vi bình thường. Bạn phải ép nó bởi vì nguyên nhân gốc rễ là hành vi trình duyệt thông thường có nghĩa là để ngăn chặn việc gửi lại các biểu mẫu ngẫu nhiên mà thực sự LÀM một cái gì đó chẳng hạn như gửi một khoản thanh toán. – Nikki9696
Tôi nghĩ rằng nếu dữ liệu này gửi lại âm thầm những điều xấu sẽ xảy ra. Tôi cần tìm cách xóa dữ liệu POST sau khi nó xảy ra. Tôi đang đọc về PRG hiện tại. –