У меня есть очень простая проблема, но кажется, что я не могу найти решение.
У меня есть объект, который инициализирован в моем методе OnGet
.Я хочу, чтобы клиент обновил информацию и затем обновил ее обратно в БД.(Некоторая информация об объекте хранится только в БД, но не видна и не редактируется для пользователя)
Теперь я пытаюсь передать полный объект в моей форме в сочетании с входными данными изКлиент.Если я пытаюсь получить доступ к объекту, все атрибуты равны нулю.Вместо этого, если я пытаюсь передать только один атрибут в виде строки в форме, он работает просто отлично.
Это мой код:
public class UpdateLicenseModel : PageModel
{
private readonly license_backupContext _db;
public UpdateLicenseModel(license_backupContext db)
{
_db = db;
}
public IList<License> Licenses { get; set; }
[BindProperty]
public License SelectedLicense { get; set; }
[Auhtorize]
public void OnGet()
{
Licenses = _db.License.ToList();
SelectedLicense = Licenses.SingleOrDefault(s => s.Licenseid.ToString().Equals(LicenseString));
}
public IActionResult OnPost()
{
var license = SelectedLicense;
if (!ModelState.IsValid)
{
return Page();
}
_db.License.Update(license);
_db.SaveChanges();
return RedirectToPage("./Licenses");
}
}
В приведенном выше коде член лицензии в OnPost имеет значения только в тех полях, где пользователь что-то редактировал, все остальные поля равны нулю (mustnне будет нулевым)
Это моя форма (упрощенно):
<form method="post">
<div class="row">
<div class="col-6 form-group">
<label for="ID"><b>ID</b></label>
<input class="form-control input-sm" id="ID" value="@Model.SelectedLicense.ID" asp-for="SelectedLicense.ID" />
</div>
<div class="col-6 form-group">
<label for="Name"><b>Name</b></label>
<input class="form-control input-sm" id="Name" value="@Model.SelectedLicense.Name" asp-for="SelectedLicense.Name" />
</div>
</div>
<div class="row">
<div class="col">
<input type="submit" class="btn btn-success" value="Speichern" />
</div>
</div>
<input type="hidden" asp-for="SelectedLicense" />
</form>