视图将在名称或日期上显示搜索。问题是ValidationSummary(根据类)要求输入两个值,并将为未显示的字段/属性添加错误。当搜索只提示名称时,有没有办法阻止它要求日期?就像禁用相关的数据注释一样?
注意:为简单起见,代码已缩短,仅用于ilustration。如果你发现缺少&#34 ;;"请不要投票。或类似的。
public class CustomSearch
{
[Required(ErrorMessage = "The text must be filled in.")]
public string SearchTextValue { get; set; }
[Required(ErrorMessage = "The Date must be selected.")]
public string SearchDateValue { get; set; }
}
<div>
<div>
@if (Model.SearchValidationSummary) { @Html.ValidationSummary(false) }
<div>
@using (Html.BeginForm("", "", FormMethod.Post ))
{
if (Model.SearchText) { @Html.TextBoxFor(m => m.SearchTextValue) }
else if (Model.SearchDate) { @Html.DateEditFor(m => m.SearchDateValue) }
}
</div>
答案 0 :(得分:0)
像丹尼尔在上面的评论中所建议的那样使用像RequiredIf
注释这样的东西可能是最优雅的解决方案,但仅仅是为了完整性,还有其他选择。
首先,您只能删除错误。有点像:
if (searchType = "text")
{
ModelState["SearchDateValue"].Errors.Clear();
}
if (searchType = "date")
{
ModelState["SearchTextValue"].Errors.Clear();
}
基本上,无论哪种搜索类型,您只需清除其他字段的错误。
其次,您可以手动验证而不是依赖注释:
if (searchType == "text" && String.IsNullOrWhiteSpace(model.SearchTextValue))
{
ModelState.AddModelError("SearchTextValue", "The text must be filled in.");
}