【问题标题】:Problem with Non-static method requires a target非静态方法的问题需要一个目标
【发布时间】:2019-08-02 00:03:46
【问题描述】:

又是一个问题。我有这样的问题: Non-static method requires a target

所以,我创建了我的验证,当我直接在 Create View 中使用它时它可以正常工作,但我不仅在 create 中还需要它。长话短说,这是我的验证。

public class EmailUpisaniAttribute : ValidationAttribute
{ 

    private ApplicationDbContext db = new ApplicationDbContext();
    public override bool IsValid(object value)
    {
        if (value is VMUpi VMUpi)
        {
            var pre = db.Upi.FirstOrDefault(x=>x.Email == VMUpi.Upi.Email && x.Upi_ID != VMUpi.Upi.Upi_ID);
            if (pre == null)
            {
                return true;
            }
        }
        return false;
    }

}

所以,在我发布的那个链接上,他们说这可能是因为 lambda 在 where 但我不知道我能做些什么来解决这个问题。

【问题讨论】:

  • 有时 EF(我想?)查询中的错误消息可能很难理解。尝试将 db.Upi.FirstOrDefault... 更改为 db.Upi.ToList().FirstOrDefault 并查看在物化查询上执行 lambda 时是否会收到更好的错误消息。
  • TY。我有,现在它说 System.NullReferenceException:'对象引用未设置为对象的实例。它指向 x.Email
  • 小心不要遍历孩子,并在调用孩子的孩子时假设它们不为空。例如 VMUpi.Upi.Email。 Upi 可能为空,而您正在调用电子邮件
  • @dsadsdasdas 那么您将经历与引用问题完全相同的事情。您应该为 `VMUpi.Upi 添加一个空检查

标签: asp.net-mvc


【解决方案1】:

现在我知道问题所在了。当我按下按钮提交时,它首先检查自定义验证,然后进入控制器以获取 post 方法。问题是我的 ID 在验证时为 0。 ID 在进入 post 方法后变为数字,但我的模型已经是错误的。有没有解决办法。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多