刷新页面执行post方法

时间:2014-01-05 18:20:14

标签: c# asp.net-mvc

我正在学习asp.net mvc框架

我用表单创建页面。来自此表单的数据进入数据库。 然后我将此页面返回给用户,其中包含数据库中的所有数据易

确定。

  • 显示带有表单的页面。确定
  • 将此表单中的数据写入数据库。确定
  • 从数据库中读取数据并将其显示给用户。确定

确定。但是,然后用户刷新页面,post方法再次执行相同的表单数据和另一个数据写入数据库。 WTF?

这里代码:

控制器:

public class MainController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        return View(db.Entries.ToList());
    }

    [HttpPost]
    public ActionResult Index(Message msg)
    {
        db.Entries.Add(msg);
        db.SaveChanges();

        return Index();
    }

    private MessagesContext db = new MessagesContext();
}

查看:

@using BasicWeb.Models
@model List<Message>
@{
    ViewBag.Title = "Index";
}

<h2>Сохранялка</h2>

<form method="post" action="">
    <fieldset>
        <legend>Введи бурду</legend>
        <input type="text" name="UserName" maxlength="512"/>
        <input type="submit" value="ВВОДИ МЕНЯ"/>
    </fieldset>
</form>
<br />
@foreach(Message item in @Model)
{
    <p>@item.UserName</p>
}

2 个答案:

答案 0 :(得分:2)

通过在POST请求后刷新页面,您实际上重新提交表单。

作为一种做法,在提交表单后,请确保将用户重定向到相同的表单,但作为GET请求。

在此处详细了解:Post/Redirect/Get (PRG)

答案 1 :(得分:0)

您可能希望跟踪请求是否是因为页面刷新。

以下可能会有所帮助: Page Refresh Causes Duplicate POST in ASP.NET Applications

您需要检查请求是否是因为回发或页面刷新。