Vì vậy, tôi đang sử dụng Xác thực thông thạo trên biểu mẫu. Khi tôi nhấp vào gửi và không có gì được nhập, tôi nhận được lỗi xác thực cho Ngày sinh. Nếu tôi nhập DoB, thì tôi sẽ nhận được xác thực cho Tên.Xác thực thông thạo không xác thực toàn bộ biểu mẫu lần đầu tiên
Tại sao điều này lại xảy ra? Tôi không thể tìm ra những gì tôi mắc sai lầm.
hình thức của tôi:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(customer => customer.CustomerIncomeInfo.CustomerEmploymentInfoModel.EmployerModel.Id)
<!-- basic customer info -->
<fieldset>
<legend>Customer Info</legend>
@Html.ValidationSummary(false, "Please correct the errors and try again", new { @class = "text-danger" })
<div class="row">
<div class="col-md-6">
<dl class="dl-horizontal">
<dt>@Html.LabelFor(model => model.FirstName)</dt>
<dd>@Html.EditorFor(model => model.FirstName, new {@class = "form-control"})</dd>
</dl>
</div>
<div class="col-md-6">
<dl class="dl-horizontal">
<dt>@Html.LabelFor(model => model.DateOfBirth)</dt>
<dd>@Html.EditorFor(model => model.DateOfBirth, new {@class = "form-control"})</dd>
</dl>
</div>
</div>
</fieldset>
}
My thạo Validation Code:
public CustomerValidator()
{
RuleFor(customer => customer.FirstName)
.Length(3, 50)
.NotEmpty()
.WithMessage("Please enter a valid first name");
RuleFor(customer => customer.DateOfBirth).NotEmpty().WithMessage("Please enter a valid date of birth");
}
mẫu của tôi:
public class CustomerModel
{
public CustomerModel()
{
}
public Guid Id { get; set; }
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("D.O.B.")]
public DateTime DateOfBirth { get; set; }
}
Đăng ký validator với Autofac:
builder.RegisterType<CustomerValidator>()
.Keyed<IValidator>(typeof(IValidator<CustomerModel>))
.As<IValidator>();
bạn có thể đăng các mã nơi bạn thực hiện các hoạt động Validate để xem làm thế nào bạn đang quay trở lại các lỗi để xem? – Javier
Khi bạn có một DoB trống, bạn có nhận được thông báo "Vui lòng nhập ngày sinh hợp lệ" hay một ngày sinh khác không? Tôi đoán bạn thậm chí không đi qua xác nhận bằng FluentValidation trong trường hợp này (vì cũng có xác thực cho kiểu dữ liệu chính xác trong mvc: và bạn cố gắng chuyển một giá trị null vào một DateTime không có giá trị tương đương. Nếu bạn viết "a" vào một hộp văn bản liên quan đến loại int) –
Raphaël Althaus, bạn đã đúng! Làm cho DoB nullable cố định vấn đề của tôi! Nếu bạn có thể gửi một phản ứng thực tế (và tốt nhất là với một số chi tiết cho thứ tự xác nhận) tiền thưởng là của bạn :) – RJP