CompareAttribute始终抛出与ValidationResult不匹配

时间:2017-01-06 09:18:17

标签: c# asp.net-mvc

我正在检查ASP.NET MVC项目中的[CompareAttribute],我意识到这个声明在MVC 4版本5.2.3.0中无法正常工作。 DataAnnotations库的运行时版本是v4.0.30319。

问题在于,当我将 EditView 发布到包含这些值的 EditAction 时,EmailAdress = test@test.comConfirmEmail = test@test.com {{1} }抛出此[CompareAttribute]" EmailAdress和ConfirmEmail不匹配"。但是你看到这两个相应的值彼此相同。这可能是一个错误还是我误解了什么?

让我们看看代码:

我的部分员工类:

ValidationError

控制器内的编辑功能响应HttpPost请求:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using work18.Models;

namespace work18.Models
{
    [MetadataType(typeof(EmployeeMetaData))]
    public partial class Employee
    {
        [CompareAttribute("EmailAdress")]
        public string ConfirmEmail { get; set; }

    }

    public class EmployeeMetaData
    {           
    }
}

那么您对此问题有任何了解或建议吗?

解决编辑问题

这是因为一个非常非常愚蠢的错误。如果您在“编辑”操作方法中仔细搜索代码,您会发现include属性中没有public ActionResult Edit([Bind(Include = "ID,FullName,Gender,Age, HireDate,EmailAdress,Salary, PersonalWebSite")] Employee employee) { if (ModelState.IsValid) { db.Entry(employee).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(employee); } 错误引发的方式。

1 个答案:

答案 0 :(得分:0)

如果您查看以下行:

[Bind(Include = "ID,FullName,Gender,Age,
    HireDate,EmailAdress,Salary, PersonalWebSite")

在编辑操作方法中,您将看到没有任何属性,例如ConfirmEmail,因此它在此方法中显示为null。这就是[Compare]属性将此值设为null的方式。如果您查看Compare属性的源代码,您将获得原因。