2017-01-06 16 views
0

ASP.NET MVCプロジェクトの[CompareAttribute]をチェックしていましたが、この宣言がMVC 4バージョン5.2.3.0で正しく動作していないことに気付きました。 DataAnnotationsライブラリのランタイムバージョンはv4.0.30319です。CompareAttribute常に例外がValidationResultに一致しません

問題ここでは、私は、これらの値とEditActionEditViewを投稿するとき、EmailAdress = [email protected]ConfirmEmail = [email protected][CompareAttribute]このValidationErrorEmailAdressとConfirmEmailはと一致していない」スローということです。しかし、これらの2つの値はお互いに同じであることがわかります。それはバグか、何かを誤解することができますか?

のコードを見てみましょう:

マイ部分Employeeクラス:

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 
    {   
    } 
} 

HttpPostの要求に応答するコントローラ内の編集機能:

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); 
    } 

だからあなたはどんな知識を持っていますまたはこの問題に関する助言

EDIT問題が。これは非常に非常に愚かな間違いです

を解決しました。編集アクションメソッドでコードを慎重に検索すると、インクルードプロパティにエラーが発生した方法のConfirmEmailがないことがわかります。

答えて

0

次の行を見ると:あなたは、このようなConfirmEmailようには任意のプロパティは、それがこのメソッドにnullを投稿はありませんが表示されます編集アクションメソッドで

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

。つまり、[Compare]属性はこの値をnullとして取得します。 Compare属性のソースコードを見ると、その理由が得られます。

関連する問題