验证模型数据
本文关键字:数据 模型 验证 | 更新日期: 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");