验证模型数据

本文关键字:数据 模型 验证 | 更新日期: 2023-09-27 18:26:34

我在验证模型时遇到了一个问题,这取决于哪些文本字段有值。我有一个简单的模型:

    public class Person
    {
        [DisplayName("Forename")]
        [Required(ErrorMessage = "Please enter a forename")]
        public string Forename { get; set; }
        [DisplayName("Surname")]
        [Required(ErrorMessage = "Please enter a surname")]
        public string Surname { get; set; }
        [DisplayName("Country")]
        [Required(ErrorMessage = "Please enter a country")]
        public string Country { get; set; }
        [DisplayName("Phone Number")]
        [Required(ErrorMessage = "Please enter a phone number")]
        public string Phone { get; set; }
        [DisplayName("Mobile Number")]
        [Required(ErrorMessage = "Please enter a mobile number")]
        public string Mobile { get; set; }
    }

在我的视图中,我显示Forename,Surname,Country&使用以下代码的电话文本字段:

@Html.LabelFor(x => x.Forename)
@Html.TextBoxFor(x => x.Forename)
@Html.ValidationMessageFor(x => x.Forename)

如果用户没有电话号码,他们点击一个按钮,就会显示手机号码的另一个文本字段。然后重置"电话"文本字段。如果用户输入一个手机号码,然后提交表单,则失败。是否可以在我的模型验证中使用条件语句,仅在另一个属性没有值的情况下验证该属性。

因此,如果"Mobile"有一个值,但"Phone"没有,验证将验证"Mobile",但忽略"Phone",反之亦然。如果最后一段不够清晰,我们深表歉意。任何帮助都将不胜感激。

验证模型数据

您可以始终在控制器中进行验证,下方的伪代码

if (Condition)
{
    ModelState.AddModelError("PropertyNameHere", "ErrorMessageHere");
}

保持视图的原样。只需从模型中删除[Required()]标记即可。您还希望将此代码添加到if(ModelState.IsValid)代码之上。

您可以通过简单的检查手动完成,如:

if (ModelState.ContainsKey("Phone Number") && !ModelState.ContainsKey("Mobile Number"))
         ModelState.Remove("Phone Number");
else if (!ModelState.ContainsKey("Phone Number") && ModelState.ContainsKey("Mobile Number"))
         ModelState.Remove("Mobile Number");