2016-06-10 165 views
1

在我的HomeController中我有一个函数来处理从主页提交的表单。表单在页面刷新提交

[HttpPost] 
public ActionResult Index(string message){ 

    // Do something 

    return View(); 
} 

我把这个值存储在数据库中。一切工作都很好。但我注意到的是,在我提交初始值后,我刷新页面,并重新提交具有相同值的表单。每次刷新页面时,它都会向DB提交一条消息。

想法?我还没有看到其他人在线遇到这个问题。

+0

您使用GET请求?如果您使用获取请求提交表单,那么每次刷新或转到该表单时,网址都会一直保持提交 –

+0

我相信,如果您在页面上发布提交(按钮),唯一的方法就是点击。刷新生成获取请求,而不是帖子。 –

回答

1

您想关注Post/Redirect/Get的设计模式。

它处理完数据后基本上重定向到另一个页面。

例如,

[HttpPost] 
public ActionResult Index(string message){ 

    if (ModelState.IsValid) 
    { 
     // Save data to database. 

     return RedirectToAction("Index", "Home"); 
    } 
    // If we got this far, something failed, redisplay form 
    return View(); 
} 
+0

ModelState.IsValid对于通过按钮按下的表单以及页面刷新均保持为真。 –

+0

如果模型有效,ModelState.IsValid将始终返回true。这不是重点;重点是在成功处理发布的数据后重定向到另一个页面。如果用户刷新浏览器,他/她将刷新另一个HttpGet页面([Idempotent](https://en.wikipedia.org/wiki/Idempotence))。 – Win

+0

啊我明白你的意思了。是的,我可能需要重构一些功能,这些功能都是在单个页面上完成的。 –