我在验证模型方面存在问题,具体取决于哪些文本字段具有值。我有一个简单的模型:
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)
如果用户没有电话号码,他们会点击一个按钮,这会显示移动电话号码的另一个文本字段。 "电话"文本字段然后重置。如果用户输入手机号码然后提交表单则失败。是否可以在我的模型验证中使用条件语句,以便仅在另一个属性没有值时验证属性。
所以,如果"移动"有价值,但"电话"没有,验证将验证"移动"但忽略"电话"反之亦然。如果最后一段不够清楚,请道歉。任何帮助将不胜感激。
答案 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");