GET 请求后 POST 中存在的查询字符串

Query string present in POST after a GET request

我是网络开发的新手,所以如果这个问题看起来是一个非常基础的问题,请多多包涵。

我的 Razor 页面中有这些代码

<form method="get">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="GET" />
</form>

<form method="post">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="POST" />
</form>

还有我的页面模型

public void OnGet(int id, DateTime addDate, string title, bool isDone)
{
}
public void OnPost(int id, DateTime addDate, string title, bool isDone)
{
    // Not empty when POSTed after GET. I suppose the POST will not use query string?
    var q = Request.QueryString;
}

当我POST GET 之后的表单时,查询字符串不为空(来自最后一个GET)。表单值 POST 没问题,但是 POST 请求中查询字符串的存在让我感到困惑。

我是否错过了一些基本的 HTML 概念?

When I POST the form after GET, the query string is not empty (from the last GET).

默认情况下,如果使用 GET 动词,表单值将附加到接收页面的 URL 作为查询字符串值。

在 Razor 页面中,如果省略页面名称或页面处理程序属性,表单将提交到当前 URL。

The form values are POSTed OK, but the presence of query string in a POST request confuse me.

如果您不希望之前 GET 请求的这些查询字符串值出现在您的 POST 处理程序中,您可以尝试使用当前页面模型名称显式设置 asp-page 属性,如下所示。

<form method="post" asp-page="/Test">
    <input type="number" name="Id" />
    <input type="date" name="AddDate" />
    <input type="text" name="Title" />
    <input type="checkbox" name="IsDone" value="true" />

    <input type="submit" value="POST" />
</form>

浏览器将没有 action(确实应该提供)的表单视为与 action="" 相同,这意味着:使用当前页面位置。这意味着它包含当前查询字符串。

因为您不希望这样:请明确指定 action