当用户从下拉列表中选择一个项目并按下按钮时,我的应用程序会显示根据所选值手动绑定和过滤的数据列表。如果用户按下浏览器的“刷新”按钮,则会询问用户是否确定要再次提交查询。
我不希望浏览器询问此问题。我该如何避免这种行为?
据我了解,这可以通过实现post / redirect / get模式来完成,但我不知道如何在ASP.NET 3.5中实现它。
答案 0 :(得分:1)
浏览器重新提交的所有POST请求都将确认与用户重新提交。您无法在浏览器中更改此行为。
PRG模式对asp.net的意义在于您测试回发,执行处理,并将用户重定向到不同的页面(或具有不同查询字符串的同一页面以更改该页面的行为)。
这种模式的问题是你失去了asp.net的所有回发功能,比如viewstate和自动表单处理。
答案 1 :(得分:0)
是的,像你这样的事情会在你的页面加载事件中为你完成工作,例如:
// Check to see if the user submitted the form:
if (Page.IsPostBack){
// Get the Params collection - query and forms
NameValueCollection params = Request.Params;
StringBuilder query = new StringBuilder();
// Iterate over the params collection to build a complete
// query string - you can skip this and just build it
// manually if you don't have many elements to worry about
for(int i = 0; i <= params.Count - 1; i++)
{
// If we're not on the first parameter, add an & seperator
if (i > 0){
query.Append("&");
}
// Start the query string
query.AppendFormat("{0}=", params.GetKey(i));
// Create a string array that contains
// the values associated with each key,
// join them together with commas.
query.Append(String.Join(",", pColl.GetValues(i));
}
Response.Redirect(String.Format("{0}?{1}",
Request.Url.AbsolutePath, query.ToString()))
}
此模式的另一个问题是,您最终会在历史记录中使用此附加重定向,这可能会导致用户必须再次单击两次才能返回搜索表单。
从好的方面来说,他们现在可以非常愉快地为结果页面添加书签并返回结果,而无需重新提交表单。