Я новичок в веб-разработке, так что потерпите меня, если этот вопрос покажется очень простым.
У меня есть эти коды на моей странице 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;
}
Когда я отправляю форму после GET, строка запроса не пуста (из последнего GET). Значения формы отправляются нормально, но наличие строки запроса в запросе POST меня смущает.
Я пропустил какую-то фундаментальную концепцию HTML?
Когда я отправляю форму после GET, строка запроса не пуста (из последнего GET).
По умолчанию значения формы добавляются к URL-адресу принимающей страницы в виде значений строки запроса, если используется команда GET.
На страницах Razor, если имя страницы или атрибут обработчика страницы опущены, форма будет отправлена по текущему URL-адресу.
Значения формы отправляются нормально, но наличие строки запроса в запросе POST меня смущает.
Если вы не хотите, чтобы эти значения строки запроса для предыдущего запроса 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
Для тех, кто проголосовал за закрытие этого вопроса, не могли бы поделиться причиной?