Hej uczę się ASP. Net i w kursie jestem na etapie stworzenia na stronie formularza i przekazania wartości z inputów do handlera OnPost() i nie mogę zrozumieć jednej sytuacji.
Mam podstronę, której zadaniem jest tworzenie nowej kategorii ( np. dla produktów ) i zapis tej kategorii do bazy danych za pomocą Entity.
Tak wygląda plik .cs tej podstrony:
using AbbyWeb.Data;
using AbbyWeb.Model;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace AbbyWeb.Pages.Categories
{
public class CreateModel : PageModel
{
private readonly ApplicationDbContext _db;
public Category Category { get;set;}
public CreateModel(ApplicationDbContext db)
{
_db = db;
}
public void OnGet()
{
}
public async Task<IActionResult> OnPost(Category category)
{
await _db.Categories.AddAsync(category);
await _db.SaveChangesAsync();
return RedirectToPage("Index");
}
}
}
A tak wygląda prosty formularz napisany w widoku tej strony:
@page
@model AbbyWeb.Pages.Categories.CreateModel
@{
<form method="post">
<div class="border p-3 mt-4">
<div class="row pb-2">
<h2 class="text-primary pl-3">Create category</h2>
<hr/>
</div>
<div class="mb-3">
<label asp-for="Category.Name"></label>
<input asp-for="Category.Name" type="text" class="form-control">
</div>
<div class="mb-3">
<label asp-for="Category.DisplayOrder"></label>
<input asp-for="Category.DisplayOrder" type="text" class="form-control">
</div>
<button type="submit" class="btn btn-primary" style="width:150px">Create button</button>
</div>
</form>
}
I mam problem, ponieważ w metodzie:
public async Task<IActionResult> OnPost(Category category)
{
await _db.Categories.AddAsync(category);
await _db.SaveChangesAsync();
return RedirectToPage("Index");
}
nazwa argumentu (category) musi być dokładnie taka sama jak nazwa właściwości:
public Category Category { get;set;}
W przeciwnym wypadku w miejscu:
await _db.Categories.AddAsync(category);
w argumencie category wszystkie pola przechowują wartości null...
Wygląda na to, że jak nazwa przyjmowanego argumentu do handlera będzie inna niż nazwa właściwości wykorzystywana w widoku to dane z inputa do niego nie trafiają.
Czy ktoś wie o co może chodzić ? Czy ASP wymaga konkretnego nazewnictwa dla parametrów w handlerze ?