在我的控制器中,我添加了一些ModelState错误。 因此,当我渲染我的视图时,我希望获得所有这些错误并更改包含错误的字段标签的颜色。
所以,我认为我需要获取所有ModelState错误,获取字段名称然后更改颜色。这是一个好方法吗?
如何在视图中获取ModelState错误?
答案 0 :(得分:24)
您可以通过ViewData.ModelState
访问它。
如果您需要更多控制权,您可以使用
ViewData.ModelState.IsValidField("name_of_input")
或获取包含以下错误的输入列表:
var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();
答案 1 :(得分:10)
在我的控制器中,我添加了一些ModelState错误。所以,当我渲染我的时候 查看,我想得到所有这些错误并改变颜色 包含错误的字段的标签。
如果您在ModelState中使用与您在视图中使用的Html.ValidationMessageFor帮助程序完全相同的键添加模型错误,那将会发生什么。
因此,举例来说,假设您的表单中包含以下代码段:
@Html.LabelFor(x => x.Bazinga)
@Html.EditorFor(x => x.Bazinga)
@Html.ValidationMessageFor(x => x.Bazinga)
在您的HttpPost控制器操作中,您可以添加以下错误消息以突出显示Bazinga字段:
ModelState.AddModelError("Bazinga", "Please enter a valid value for the Bazinga field");
如果您想添加一些与某些特定输入字段无关的通用错误消息,您可以始终使用表单顶部的@Html.ValidationSummary()
帮助程序来显示它。在您的控制器操作中:
ModelState.AddModelError(string.Empty, "Some generic error occurred. Try again.");
答案 2 :(得分:1)
我的操作代码
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
FirstName = registerViewModel.FirstName,
LastName = registerViewModel.LastName,
Email = registerViewModel.Email,
PhoneNumber = registerViewModel.PhoneNumber,
};
var result = await userManager.CreateAsync(user, registerViewModel.Password);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
return View(registerViewModel);
}
在asp.net 核心
在 View
中编写此代码
<div class="col-xl-12" style="margin-top:40px;">
@foreach (var modeleState in ViewData.ModelState.Values)
{
foreach (var error in modeleState.Errors)
{
<h5 style="color:red;margin-top:8px;">@error.ErrorMessage</h5>
}
}
</div>
在asp.net mvc5
在 View
中编写此代码
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
答案 3 :(得分:0)
要显示所有错误,请尝试:
<div asp-validation-summary="All" class="text-danger"></div>
或
<div class="text-danger">
@Html.ValidationSummary(false)
</div>