【问题标题】:ASP.NET Core data annotation - different values between two propertiesASP.NET Core 数据注释 - 两个属性之间的不同值
【发布时间】:2019-06-10 12:35:59
【问题描述】:

我有这个视图模型:

public class VM
{
    [Required]
    public int Int1 { get; set; }
    [Required]
    public int Int2 { get; set; }
}

在视图中,这两个整数是通过下拉菜单选择的。如果从两个下拉列表中选择相同的值,我希望不显眼的验证失败(例如,假设 Int1Int2 可以采用 1-10 范围内的值,并且用户为两者选择 9,验证应该失败)。我希望通过数据注释来实现这一点,而不是在前端编写 Javascript。

我找不到内置的验证属性,我找到了[Compare(string otherProperty)],但我本质上是在寻找Compare 的否定。

【问题讨论】:

  • 你不能使用流利验证和检查值之类的 3rd 方验证吗?
  • @VinitPatel 是的,我猜,它是否也支持前端(不显眼)验证?
  • 除了内置此特定功能的第三方库之外,您唯一的好选择是创建自定义验证属性以及相应的客户端验证(如果需要)。文档有一个指南:docs.microsoft.com/en-us/aspnet/core/mvc/models/…。同一页面下方有一个部分用于自定义客户端验证。
  • 没有javascript,我可以建议你在控制器if(int1==int2){return View();}

标签: asp.net-mvc asp.net-core


【解决方案1】:

您需要实现自己的逻辑。

  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);
            }
    }
    
  2. 模型配置

    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 方法参数的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2023-04-10
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多