验证模型数据

时间:2014-10-14 20:31:30

标签: c# asp.net-mvc validation

我在验证模型方面存在问题,具体取决于哪些文本字段具有值。我有一个简单的模型:

    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)

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

所以,如果"移动"有价值,但"电话"没有,验证将验证"移动"但忽略"电话"反之亦然。如果最后一段不够清楚,请道歉。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

你总是可以在控制器中进行验证,下面是伪代码

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

保持您的观点完全一致。只需从模型中删除[Required()]标记即可。您还希望将此代码添加到if(ModelState.IsValid)代码上方。

答案 1 :(得分:0)

您可以通过以下简单检查手动完成:

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");