【发布时间】:2019-12-10 07:29:31
【问题描述】:
我在 ASP.NET MVC 项目中使用 EF 数据注释,对于必填字段,我定义如下所示的字段:
型号:
[Required(ErrorMessage = "Required!");
public string PhoneHome{ get; set; }
[Required(ErrorMessage = "Required!");
public string PhoneWork{ get; set; }
[Required(ErrorMessage = "Required!");
public string PhoneMobile { get; set; }
查看:
@Html.TextBoxFor(m => m.PhoneHome)
@Html.ValidationMessageFor(m => m.PhoneHome, null, new { @class = "field-validation-error" })
@Html.TextBoxFor(m => m.PhoneWork)
@Html.ValidationMessageFor(m => m.PhoneWork, null, new { @class = "field-validation-error" })
@Html.TextBoxFor(m => m.PhoneMobile )
@Html.ValidationMessageFor(m => m.PhoneMobile , null, new { @class = "field-validation-error" })
我只想将这些字段中的一个设为必填(如果用户填写其中一个字段就可以了,但如果他没有填写任何一个字段,我想显示一条错误消息并且不要让他提交表单),但不知道执行此操作的最合适和更智能的方法?我应该在提交时使用 JavaScript 检查所有这些字段并显示必要的错误消息吗?还是我应该只使用数据注释来执行此操作?
【问题讨论】:
-
澄清一下,您已经知道该解决方案,但是如果您想在 UI 或服务器端进行验证,您会遇到冲突吗?
-
我认为您最好根据
Required属性创建自己的验证规则,但需要一些额外的参数和额外的验证逻辑。这将在服务器端验证,但您可以轻松地在客户端实现它。 -
@JerdineSabio 实际上这并不能解决问题,因为如果我使用这种方法,则不允许用户仅填写一个字段而将其他两个字段留空。但我想让用户至少填写一个字段。我错了吗?
-
@lordvlad30 我几年前使用过
ExpressiveAnnotations。在这个场景中,您的意思是在服务器端使用ExpressiveAnnotations并在客户端使用 Javascript 进行必要的更新? -
@hexadecimal 我将创建您自己的属性来扩展
ValidationAttribute(System.ComponentModel.DataAnnotations) 并支持客户端验证,您需要实现IClientValidatable接口(System.Web.Mvc)。但是,如果您只需要它一次,我可能不会投入太多工作,只需在控制器中验证它,然后再检查ModelState.IsValid。
标签: c# asp.net-mvc entity-framework asp.net-core data-annotations