<编码> TryUpdate ModelAsync()似乎拒绝接受我的模型物体,如果航行财产无效,即使外国钥匙被适当确定。
例如,如果作者身份证明成立,它就获得接受书,但作者却无效:
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
}
这里是一个完整的工作例子,表明这种行为问题:
public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public List<Book> Books { get; set; }
}
模式:
public class EditModel : PageModel
{
private readonly YourDbContext _context;
private readonly ILogger<EditModel> _logger;
[BindProperty] public Book Book { get; set; }
public List<Author> Authors {get; set;}
public EditModel(YourDbContext context, ILogger<EditModel> logger)
{
_context = context;
_logger = logger;
}
public async Task<IActionResult> OnGetAsync(int? id)
{
if (id == null) { return NotFound(); }
Book = await _context.Books.Include(b => b.Author).FirstOrDefaultAsync(m => m.Id == id);
if (Book == null) { return NotFound(); }
Authors = await _context.Authors.ToListAsync();
return Page();
}
public async Task<IActionResult> OnPostAsync(int? id)
{
var bookToUpdate = await _context.Books.FindAsync(id);
if (bookToUpdate == null) { return NotFound(); }
if (await TryUpdateModelAsync<Book>(bookToUpdate, "book", b => b.Title, b => b.AuthorId))
{
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
else
{
foreach (var modelStateKey in ModelState.Keys)
{
var modelStateVal = ModelState[modelStateKey];
foreach (var error in modelStateVal.Errors)
{
_logger.LogError($"Key: {modelStateKey}, Error: {error.ErrorMessage}");
}
}
}
Book = bookToUpdate;
return RedirectToPage(new { id});
}
}
Razor page:
@page
@model EditModel
<form method="post">
<input type="hidden" asp-for="Book.Id" />
<input asp-for="Book.Title" />
<select asp-for="Book.AuthorId" asp-items="@(new SelectList(Model.Authors,"Id","Name"))"></select>
<input type="submit" value="Save" />
</form>
模型国家总是有错误投诉:
Key: Book.Author, Error: The Author field is required.
这显然是一个简化的例子,但总体而言,可以有许多大型导航特性,因此,所有这些特性都不可能有人居住。