提问人:skyhunter96 提问时间:10/30/2023 更新时间:10/30/2023 访问量:18
IValidatableObject 未调用其 Validate 方法
IValidatableObject does not get its Validate method invoked
问:
我有带有 Validate 方法的 viewModel 类:
public class BookViewModel : IValidatableObject
{
public IEnumerable<(int AuthorId, string AuthorName)>? Authors { get; set; }
public IEnumerable<int>? AuthorIds { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var validationResults = new List<ValidationResult>();
if (NewAuthor.IsNullOrEmpty() && AuthorIds.IsNullOrEmpty())
{
validationResults.Add(new ValidationResult(
"Both Author and New Author fields are empty. Chose Authors from the list or enter a new one",
new[] { nameof(AuthorIds) }));
}
return validationResults;
}
“创建”视图的相关部分:
@model LibApp.WebApp.ViewModels.BookViewModel
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="AuthorIds" class="control-label"></label>
<select asp-for="AuthorIds" name="AuthorIds" class="form-control" asp-items="ViewBag.AuthorIds" multiple="multiple"></select>
<span asp-validation-for="AuthorIds" class="text-danger"></span>
</div>
<p>If author doesn't exist, enter new author:</p>
<div class="form-group">
<label asp-for="NewAuthor" class="control-label"></label>
<input asp-for="NewAuthor" class="form-control" />
<span asp-validation-for="NewAuthor" class="text-danger"></span>
</div>
以及我在表单提交时调用的 Create POST 方法的控制器操作:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(BookViewModel model)
{
try
{
if (ModelState.IsValid)
{
_context.Add(model);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(model);
}
catch (Exception exception)
{
return RedirectToAction("ServerError", "Error");
}
}
问题是,由于 IValidatableObject 实现,VM 的 Validate 方法应该在表单提交时调用,但它没有被调用,条目也没有被调用。Value.Errors 包含我的错误。有什么想法吗?
答: 暂无答案
评论