我有这个视图模型:
public class VM
{
[Required]
public int Int1 { get; set; }
[Required]
public int Int2 { get; set; }
}
在视图中,这两个整数是通过下拉菜单选择的。如果两个下拉列表中都选择了相同的值,我希望不打扰的验证会失败(例如,假设Int1
和Int2
的取值范围为1-10,并且用户为两者选择了9
,验证应该失败)。我希望通过数据注释来实现这一目标,而不是在前端编写Javascript。
我找不到内置的验证属性,我发现了[Compare(string otherProperty)]
,但实际上是在寻找Compare
的否定项。
答案 0 :(得分:1)
您需要实现自己的逻辑。
远程验证控制器
public class NotEqualController : Controller
{
[AcceptVerbs("Get", "Post")]
public IActionResult Verify()
{
string firstKey = Request.Query.Keys.ElementAt(0);
string secondKey = Request.Query.Keys.ElementAt(1);
string first = Request.Query[firstKey];
string second = Request.Query[secondKey];
if (string.Equals(first, second))
{
return Json(false);
//return Json(data: $"Values for these two fields should not be same.");
}
return Json(data: true);
}
}
模型配置
public class Product
{
public int Id { get; set; }
[Remote(action: "Verify", controller: "NotEqual", AdditionalFields = nameof(UserImage), ErrorMessage = "Are Same")]
public string Name { get; set; }
[Remote(action: "Verify", controller: "NotEqual", AdditionalFields = nameof(Name), ErrorMessage = "Are Same")]
public string UserImage { get; set; }
}
由于您可能将此逻辑用于许多不同的模型和字段,因此我实现了使用查询字符串中的字段代替Verify
方法参数的逻辑。