我的视图上有以下actionlink,它在控制器上调用一个动作。
@Html.ActionLink("Send Request", "SendRequest", new { id = item.CertificateId })
点击链接后会形成以下网址。
http://localhost:61742/Controller/SendRequest/17
现在当我点击刷新时,再次调用相同的动作,它会向我的表中插入一个重复的行。有没有办法防止重复调用我的操作,或者我应该在向表中插入行之前添加一个检查。
我甚至尝试更改我的视图来调用HttpPost Action,但这也会在刷新时再次调用。
答案 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");
}