#c# #asp.net-core
#c# #asp.net-core
Вопрос:
Привет, я пытаюсь создать страницу Razor с простой формой, которая добавляет новый элемент в список, но OnPost()
метод никогда не вызывается. У меня есть точка останова в первой строке метода, и она никогда не попадает, но в OnGet()
она работает.
Это мой OnPost()
метод:
public void OnPost()
{
newDocument = Int32.Parse(Request.Form[nameof(newDocument)]);
newAge = Int32.Parse(Request.Form[nameof(newAge)]);
newTriage = (Triage)Int32.Parse(Request.Form[nameof(newTriage)]);
newName = Request.Form[nameof(newName)];
newGender = Request.Form[nameof(newGender)];
newSymptoms = Request.Form[nameof(newSymptoms)];
var newPatient = new Patient
{
Document = newDocument,
Name = newName,
Age = newAge,
Gender = newGender,
Triage = newTriage,
Symptoms = newSymptoms
};
patients.Add(newPatient);
OrderPatients();
}
И страница razor имеет такую форму:
<form>
<div class="form-group">
<label for="patientDoc">Documento</label>
<input asp-for="newDocument" type="number" class="form-control" id="patientDoc" placeholder="ingrese documento">
</div>
<div class="form-group">
<label for="patientName">Nombre</label>
<input asp-for="newName" type="text" class="form-control" id="patientName" placeholder="Nombre">
</div>
<div class="form-group">
<label for="patientAge">Edad</label>
<input asp-for="newAge" type="number" class="form-control" id="patientAge" placeholder="Edad">
</div>
<div class="form-group">
<label for="patientGender">Género</label>
<input asp-for="newGender" type="text" class="form-control" id="patientGender" placeholder="Género">
</div>
<div class="form-group">
<label for="patientTri">Prioridad</label>
<select asp-for="newTriage" class="form-control" id="patientTri">
@foreach (Triage tri in Enum.GetValues(typeof(Triage)))
{
<option>@tri</option>
}
</select>
</div>
<div class="form-group">
<label for="patientSymp">Sintomas</label>
<input asp-for="newSymptoms" type="text" class="form-control" id="patientSymp" placeholder="Sintomas">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Я читал, что вы должны поместить эту строку @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
в начале страницы, но я сделал это, и все равно OnPost не попадает.
Кто-нибудь знает, что не так?
Ответ №1:
Тип метода по умолчанию для form
является GET
, поэтому он попадает в ваш OnGet
обработчик, потому что вы не указали метод. Измените <form>
на <form method="post">
, и это должно сработать.
Ответ №2:
Забудьте об этом. Мне просто нужно было добавить method="form"
в начале формы следующим образом:
<form method="post">
. . .
</form>
Собираюсь оставить это здесь для другого новичка вроде меня, которому это может понадобиться.