#c# #asp.net-core #razor-pages #.net-5
#c# #asp.net-ядро #razor-страницы #.net-5
Вопрос:
Я довольно новичок в веб-разработке, так что потерпите, если этот вопрос покажется вам очень простым.
У меня есть эти коды на моей странице 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?
Комментарии:
1. Для тех, кто проголосовал за закрытие этого вопроса, не могли бы вы поделиться причиной?
Ответ №1:
Когда я ОТПРАВЛЯЮ форму после GET, строка запроса не является пустой (из последнего GET).
По умолчанию значения формы добавляются к URL-адресу принимающей страницы в качестве значений строки запроса, если используется глагол GET.
В Razor pages, если имя страницы или атрибут обработчика страницы опущены, форма будет отправлена по текущему 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>
Ответ №2:
Браузеры обрабатывают форму без action
(которая действительно должна быть предоставлена) так же, как action=""
что означает: используйте текущее местоположение страницы. Это означает, что она включает текущую строку запроса.
Поскольку вы этого не хотите: укажите явное action