Sea*_*son 5 c# asp.net ajax postback
我有一个以空白/默认状态启动的仪表板.我让用户能够将已保存的状态加载到仪表板中.当他们单击"应用"按钮时,我运行以下代码:
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));
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
RadButton1将属性"AutoPostBack"设置为false.我已将AutoPostBack设置为false,因为我想在运行click事件之前执行验证.所以,现在,我执行客户端验证,然后允许按钮单击运行.
没有更新面板包装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);
Run Code Online (Sandbox Code Playgroud)
Cla*_*edi 10
刷新浏览器时,它将重新发送您执行的上一个请求.如果它是一个POST请求(就像你在回发的情况下那样)那么它会重新发布信息,但在这之前你会看到你描述的警告信息.
避免此问题的最佳方法是实现Post/Redirect/Get模式
Post/Redirect/Get(PRG)是Web开发人员的常见设计模式,可帮助避免某些重复的表单提交,并允许用户代理使用书签和刷新按钮更直观地表现.
通常人们不会实现这一点(尽管我们应该这样做),除非重新发布可能会导致一些数据不一致.
| 归档时间: |
|
| 查看次数: |
7054 次 |
| 最近记录: |