5

サイトに管理者を追加しようとしています。AccountsModels.cs で問題が見つかりました

実装されたデータを比較するだけですが、このエラーが発生するようです。

次のビューもあります:
-Register.cshtml
-LogOn.cshtml
-ChangePasswordSuccess.cshtml
-ChangePassword.cshtml

&もちろんAccountController.cs..

誰かが解決策を知っていますか?

コードは次のとおりです。

using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Web.Security;

namespace Videoteek.Domain.Models
{
    public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Current password")]
        public string OldPassword { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "New password")]
        public string NewPassword { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm new password")]
        [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public class LogOnModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
    }

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        //****
        [Required]
        [Display(Name = "Security Question")]
        public string PwdQuestion { get; set; }
        [Required]
        [Display(Name = "Security Answer")]
        public string PwdAnswer { get; set; }

    }
}
4

8 に答える 8

5

コードから、パスワードを確認パスワードと比較したいようです。もしそうなら、あなたの属性

Compare

は正しくありません。そのはず

[CompareAttribute("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]

必要な名前空間が既にコードに追加されています。詳細については、こちらをご覧ください。

于 2013-08-17T12:25:50.783 に答える
2

私も同じエラーがありました。そして、私が.net 4.0を使用していて、それを使用していることに気付きSystem.Web.Mvc;ましSystem.ComponentModel.DataAnnotations;た。しかし、フレームワークを 4.5 に変更すると、エラーは

'CompareAttribute' is an ambiguous reference between 'System.ComponentModel.DataAnnotations.CompareAttribute' and 'System.Web.Mvc.CompareAttribute'

The type or namespace name 'Compare' could not be found (are you missing a using directive or an assembly reference?)

フレームワークが4.0ならまとめ

System.Web.Mvc;

System.ComponentModel.DataAnnotations;

フレームワークが4.0の場合は、プロジェクトを再構築します

System.ComponentModel.DataAnnotations;

プロジェクトを再構築しました

常に Visual Studio を管理者 (モード) として実行することを忘れないでください。

于 2013-12-20T22:16:56.070 に答える
2

このエラーが発生した状況は、4.0 から .Net Framework 4.5 にアップグレードしようとしたことです。これは機能せず、4.0 に戻しましたが、このエラーが発生しました。

入れてこのビルドエラーを修正しました

[System.Web.Mvc.Compare]

于 2014-06-24T08:05:15.707 に答える
1

.NET には 2 つの属性があります。おそらく、System.Web.Mvc.CompareAttributeアセンブリにある名前空間の属性が機能しますSystem.Web.Mvc.dll

同じことを行う別のもの(複製)があります。私が見ることができるように、完全なパスはあなたが参照しているものSystem.ComponentModel.DataAnnotations.CompareAttributeであるアセンブリにあります。System.ComponentModel.DataAnnotations.dll次に、おそらくDLLへの参照が必要になりますSystem.ComponentModel.DataAnnotations.dll

これも問題につながる可能性があるため、両方を参照していないかどうかを確認できます。これは問題ではないようですが、私はただ言及しています。

于 2013-08-17T12:48:57.883 に答える
1

Web API 用のクラスを使用している場合は、「using System.Web.Mvc;」を取り出します。「using System.Web.Http;」に変更します。「Compare」キーワードはそのままにしておきます。ただし、純粋な MVC を使用している場合は、「Compare」キーワードを「CompareAttribute」に変更してください。

System.ComponentModel.DataAnnotations; 検証の両方のシナリオで必要です。ただし、「Compare」または「CompareAttribute」は、純粋に検証するためのものではありません。これは、アーキテクチャ パターン (MVC または RestFul Web API) に基づいてシステムによって提供される機能です。「比較機能」の参照と使用を簡素化するために、属性クラスを使用します。

于 2014-09-11T00:15:30.790 に答える
1

.NET4 と .NET45 の間でこれを機能させるには、これらのファイルの 2 つの using ステートメントを次のように変更する必要があります。

using System.ComponentModel.DataAnnotations;
using CompareAttribute = System.Web.Mvc.CompareAttribute;
于 2015-09-01T10:14:25.043 に答える
0

シンプルな名前空間の接頭辞:

System.ComponentModel.DataAnnotations.Compare

[Required]、[Display] などの他のすべての属性はすべてこの名前空間を使用するため、当然のことです。

System.Web.Mvc 名前空間にも "Compare" というメソッドがあるため、コンパイラは混乱します。そのため、Framework 4.5 では、明示的であいまいさを取り除く必要があります。他の属性にカーソルを合わせると、System.ComponentModel.DataAnnotations 名前空間を使用していることがわかりますが、他の名前空間と競合しないため修飾する必要はありませんが、[Compare] は両方の名前空間に存在します。Framework 4 がどのように機能するかはおかしいですが、Framework 4.5 について説明する必要があります...

于 2014-10-22T02:59:47.803 に答える
0

System.Web.Mvc.dll アセンブリへの参照を追加してください!

于 2013-08-17T12:24:02.337 に答える