OnPost() не попадает в .NET Core 3.0

#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>
  

Собираюсь оставить это здесь для другого новичка вроде меня, которому это может понадобиться.