4

我的视图上有以下操作链接,它调用控制器上的操作。

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

单击链接后将形成以下 URL。

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

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

我什至尝试更改我的视图以调用 HttpPost 操作,但这也会在刷新时再次调用。

4

2 回答 2

4

问题是由于您正在刷新的页面是您的执行操作 (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");
}

这会将用户带到如下 URL:http://localhost:61742/Controller/Thanks/

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

于 2013-09-16T09:55:00.143 回答
0

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

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

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

     return Redirect("some_url");
 }
于 2013-09-16T09:55:27.163 回答