在刷新时防止重复调用操作

时间:2013-09-16 09:50:22

标签: c# asp.net-mvc-4 razor

我的视图上有以下actionlink,它在控制器上调用一个动作。

@Html.ActionLink("Send Request", "SendRequest", new { id = item.CertificateId })

点击链接后会形成以下网址。

http://localhost:61742/Controller/SendRequest/17

现在当我点击刷新时,再次调用相同的动作,它会向我的表中插入一个重复的行。有没有办法防止重复调用我的操作,或者我应该在向表中插入行之前添加一个检查。

我甚至尝试更改我的视图来调用HttpPost Action,但这也会在刷新时再次调用。

2 个答案:

答案 0 :(得分:4)

问题是由于您刷新的页面是您的Do Action(SendRequest)页面。

我建议您的操作会将重定向返回到原始页面或“感谢提交”页面。

您可以在SendRequest操作中执行此操作(应保留为HttpPost),例如:

[HttpPost]
public ActionResult SendRequest(int id)
{
    //Do you Send Request logic here

    //Redirect the user to another page once complete
    return RedirectToAction("Thanks");
}

会将用户带到以下网址:http://localhost:61742/Controller/Thanks/

当然,用户仍然可以按下浏览器“返回”按钮返回SendRequest URL,因此我建议尽可能多地进行服务器端验证以防止重复输入。除此之外,对于用户选择多次单击“发送请求”链接,您无能为力。

答案 1 :(得分:0)

首先,当您使用[HttpPost]装饰您的操作时,浏览器应至少在“刷新”(重新发布数据)之前提醒用户。

通常,重定向是解决问题的最简单方法。例如:

 [HttpPost]
 public ActionResult SendRequest(int id)
 {
     ....

     return Redirect("some_url");
 }