模型无效时不显示 MVC 客户端验证摘要
MVC Client Side Validation Summary not showing when Model is Invalid
我正在使用名为 MVC Foolproof Validation 的 MVC Validation nuget 包。
如果另一个模型 属性 为空,我会在我的模型上使用它来将 required 设置为 true。验证部分有效,因为当 Id 字段和 Location 字段留空时,ModelState 被正确设置为无效。检查 ModelState 数组上的错误,我可以看到它的工作。
我的问题是客户端验证摘要不显示。以下是我的设置方式。谁能发现我的问题?
[DisplayName("Image Id")]
public string Id{ get; set; }
[DisplayName("Location Id")]
[RequiredIfEmpty("Id", ErrorMessage = "You must..etc"]
public string LocationId{ get; set; }
在我看来,我正在按如下方式设置验证摘要和输入
<div class="form-horizontal">
<hr/>
@Html.ValidationSummary(true, "", new {@class = "text-danger"})
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.Id, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.Id, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.Id, "", new {@class = "text-danger"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.LocationId, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.LocationId, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.LocationId,"", new {@class = "text-danger"})
</div>
</div>
在我的控制器操作中,我正在检查模型状态。我需要打电话给 ModelState.AddModelError(..) 吗?我试过了,但也许我需要一种方法来调用它。
[HttpPost]
public ActionResult Search(SearchCriteria searchCriteria)
{
var searchViewModel = new SearchViewModel
{
SearchCriteria = searchCriteria
};
if (ModelState.IsValid)
{
...
}
//ModelState.AddModelError("LocationId", "test");
return View(searchViewModel);
}
将 ValidationSummary 帮助程序行中的布尔参数 (excludePropertyErrors) 更改为 false
:
@Html.ValidationSummary(false, "", new {@class = "text-danger"})
见https://msdn.microsoft.com/de-de/library/ee839464(v=vs.118).aspx
我的问题是我的行动号召是通过 ajax 完成的。我真的应该指定,在这里提供帮助的人会立即诊断出问题。当模型状态无效时,我正在 return 创建一个新视图 (searchViewModel),但我不得不将其更新为 return json.
中的错误
[HttpPost]
public ActionResult Search(SearchCriteria searchCriteria)
{
if (ModelState.IsValid)
{
var searchResults = _searchProvider.GetData(searchCriteria);
return Json(new
{
searchResults
}, JsonRequestBehavior.AllowGet);
}
string errorMessages = string.Join(" <br /> ", this.ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage));
return this.Json(new { HasError = true, ErrorMessages = errorMessages });
}
在我的例子中,我解决了它从 'ModelOnly' 到 'All':
发件人:
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
收件人:
<div asp-validation-summary="All" class="text-danger"></div>
我正在使用名为 MVC Foolproof Validation 的 MVC Validation nuget 包。
如果另一个模型 属性 为空,我会在我的模型上使用它来将 required 设置为 true。验证部分有效,因为当 Id 字段和 Location 字段留空时,ModelState 被正确设置为无效。检查 ModelState 数组上的错误,我可以看到它的工作。
我的问题是客户端验证摘要不显示。以下是我的设置方式。谁能发现我的问题?
[DisplayName("Image Id")]
public string Id{ get; set; }
[DisplayName("Location Id")]
[RequiredIfEmpty("Id", ErrorMessage = "You must..etc"]
public string LocationId{ get; set; }
在我看来,我正在按如下方式设置验证摘要和输入
<div class="form-horizontal">
<hr/>
@Html.ValidationSummary(true, "", new {@class = "text-danger"})
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.Id, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.Id, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.Id, "", new {@class = "text-danger"})
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SearchCriteria.LocationId, htmlAttributes: new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(model => model.SearchCriteria.LocationId, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.SearchCriteria.LocationId,"", new {@class = "text-danger"})
</div>
</div>
在我的控制器操作中,我正在检查模型状态。我需要打电话给 ModelState.AddModelError(..) 吗?我试过了,但也许我需要一种方法来调用它。
[HttpPost]
public ActionResult Search(SearchCriteria searchCriteria)
{
var searchViewModel = new SearchViewModel
{
SearchCriteria = searchCriteria
};
if (ModelState.IsValid)
{
...
}
//ModelState.AddModelError("LocationId", "test");
return View(searchViewModel);
}
将 ValidationSummary 帮助程序行中的布尔参数 (excludePropertyErrors) 更改为 false
:
@Html.ValidationSummary(false, "", new {@class = "text-danger"})
见https://msdn.microsoft.com/de-de/library/ee839464(v=vs.118).aspx
我的问题是我的行动号召是通过 ajax 完成的。我真的应该指定,在这里提供帮助的人会立即诊断出问题。当模型状态无效时,我正在 return 创建一个新视图 (searchViewModel),但我不得不将其更新为 return json.
中的错误 [HttpPost]
public ActionResult Search(SearchCriteria searchCriteria)
{
if (ModelState.IsValid)
{
var searchResults = _searchProvider.GetData(searchCriteria);
return Json(new
{
searchResults
}, JsonRequestBehavior.AllowGet);
}
string errorMessages = string.Join(" <br /> ", this.ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage));
return this.Json(new { HasError = true, ErrorMessages = errorMessages });
}
在我的例子中,我解决了它从 'ModelOnly' 到 'All':
发件人:
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
收件人:
<div asp-validation-summary="All" class="text-danger"></div>