C#验证重复时打刷新(F5)最后回传(C# validate repeat last PostBac

2019-07-29 13:32发布

我有一个生成文件的Web窗体,但是当我点击产生的回发到生成文件一旦完成,如果我按刷新(F5)页面重新提交回发并重新生成该文件的按钮,有什么办法来验证它,显示一条消息给用户,或者干脆什么也不做!

谢谢 :)

Answer 1:

该简单的方法将使用POST Rediret获取模式。

http://en.wikipedia.org/wiki/Post/Redirect/Get

请一定要检查出对维基百科的文章外部链接。



Answer 2:

浏览器应该警告他们,如果他们打刷新已postbacked在页面上。 我如何处理它虽然是在会话跟踪我做了什么,所以我不会重复某些动作。 一个简单的标志应该足够了。



Answer 3:

检查有问题的文件是否存在,在回传逻辑且仅当该文件不存在,创建该文件:

if (false == System.IO.File.Exists(filename))
{
   // create the file
}
else
{
   // do whatever you do when the file already exists
}


Answer 4:

我写了这个问题的解决方案,这是如果有人需要它。

  protected void Page_Load(object sender, System.EventArgs e)
  {
    /*******/
    //Validate if the user Refresh the webform.
    //U will need::
    //A global private variable called ""private bool isRefresh = false;""
    //a global publica variable called ""public int refreshValue = 0;""
    //a html control before </form> tag: ""<input type="hidden" name="ValidateRefresh" value="<%= refreshValue %>">""

    int postRefreshValue = 0;
    refreshValue = SII.Utils.convert.ToInt(Request.Form["ValidateRefresh"]); //u can use a int.parse()

    if (refreshValue == 0)
      Session["ValidateRefresh"] = 0;

    postRefreshValue = SII.Utils.convert.ToInt(Session["ValidateRefresh"]); //can use a int.parse()

    if (refreshValue < postRefreshValue)
      isRefresh = true;

    Session["ValidateRefresh"] = postRefreshValue + 1;
    refreshValue = SII.Utils.convert.ToInt(Session["ValidateRefresh"]); //can use a int.parse()
    /********/

    if (!IsPostBack)
    {
       //your code
    }
  }

你只需要评估:

if (!isRefresh)
  PostFile();
else
{
  //Error msg you are refreshing
}


文章来源: C# validate repeat last PostBack when hit Refresh (F5)