我正在检查ASP.NET MVC项目中的[CompareAttribute]
,我意识到这个声明在MVC 4版本5.2.3.0中无法正常工作。 DataAnnotations库的运行时版本是v4.0.30319。
问题在于,当我将 EditView 发布到包含这些值的 EditAction 时,EmailAdress = test@test.com
,ConfirmEmail = 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);
}
错误引发的方式。
答案 0 :(得分:0)
如果您查看以下行:
[Bind(Include = "ID,FullName,Gender,Age,
HireDate,EmailAdress,Salary, PersonalWebSite")
在编辑操作方法中,您将看到没有任何属性,例如ConfirmEmail
,因此它在此方法中显示为null。这就是[Compare]
属性将此值设为null的方式。如果您查看Compare属性的源代码,您将获得原因。