是否可以在运行时绕过类中的数据注释
本文关键字:数据 注释 运行时 是否 | 更新日期: 2023-09-27 18:33:08
视图将显示"名称"或"日期"的搜索。问题是验证摘要(根据类)要求输入两个值,并且会为未显示的字段/属性添加错误。有没有办法防止它在搜索仅提示输入名称时需要日期?喜欢禁用相关的数据注释?
注意:为简单起见,代码已缩短,仅用于阐明。如果您发现缺少";"或类似内容,请不要投票否决。
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>
正如Daniel在上面的评论中建议的那样,使用像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.");
}