【发布时间】:2014-11-05 10:45:17
【问题描述】:
我正在使用FluentValidation 来验证模型。我设置如下:
型号
public class UserViewModel {
public String Email { get; set; }
public String PhoneNumber { get; set; }
public String FullName { get; set; }
public String CompanyName { get; set; }
}
验证类
public class UserViewModelValidation: AbstractValidator<UserViewModel> {
public UserViewModelValidation() {
RuleFor(x => x.Email).NotNull().WithLocalizedMessage(() => ValidationResources.EmailRequired);
RuleFor(x => x.Email).EmailAddress().WithLocalizedMessage(() => ValidationResources.EmailValid);
RuleFor(x => x.PhoneNumber).NotNull().WithLocalizedMessage(() => ValidationResources.PhoneNumberRequired);
RuleFor(x => x.FullName).NotNull().WithLocalizedMessage(() => ValidationResources.FullNameRequired);
RuleFor(x => x.CompanyName).NotNull().WithLocalizedMessage(() => ValidationResources.CompanyNameRequired);
}
}
在 Global.asax 中注册
FluentValidationModelValidatorProvider.Configure();
控制器
[HttpPost]
public ActionResult UpdateUser(UserViewModel vm) {
if (!ModelState.IsValid)
return View(vm);
var service = DiConfig.Resolve<IUserService>();
service.Update(vm);
return RedirectToAction("Index");
}
查看
<form action="@Url.Action("UpdateUser", "User")">
@Html.ValidationSummary(true)
<div class="form-input">
@Html.LabelFor(m => m.Email, FormResources.Email)
@Html.TextBoxFor(m => m.Email)
<div class="error-message">@Html.ValidationMessageFor(m => m.Email)</div>
</div>
<div class="form-input">
@Html.LabelFor(m => m.PhoneNumber, FormResources.PhoneNumber)
@Html.TextBoxFor(m => m.PhoneNumber)
<div class="error-message">@Html.ValidationMessageFor(m => m.PhoneNumber)</div>
</div>
<div class="form-input">
@Html.LabelFor(m => m.FullName, FormResources.FullName)
@Html.TextBoxFor(m => m.FullName)
<div class="error-message">@Html.ValidationMessageFor(m => m.FullName)</div>
</div>
<div class="form-input">
@Html.LabelFor(m => m.CompanyName, FormResources.CompanyName)
@Html.TextBoxFor(m => m.CompanyName)
<div class="error-message">@Html.ValidationMessageFor(m => m.CompanyName)</div>
</div>
<div class="form-input">
<input type="submit" value="@FormResources.UpdateButton">
</div>
</form>
问题
客户端验证完美运行。这里没有问题。但是,我试图确保即使在浏览器上禁用 JS 时验证也能正常工作。我的预期是在提交表单时在页面重新加载后看到错误消息,而无需客户端验证。
但是,结果是 - 根本没有验证消息,而在 URL 中只有query string params 带有提交的值。
问题
如何在禁用 JavaScript 时进行验证?我需要的是(当验证失败时)在帖子和页面重新加载后显示验证消息。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 validation fluentvalidation