2013-08-17 8 views
5

Próbuję dodać administratora do mojej witryny. Wystąpił problem na moim AccountsModels.csTyp lub przestrzeń nazw Porównywanie nie zostało znalezione (czy brakuje dyrektywy użycia lub odniesienia do zespołu?)

Po prostu trzeba porównać dane zaimplementowane, ale wydaje mi się, że dostałem ten błąd.

Mam również widok z:
-Register.cshtml
-LogOn.cshtml
-ChangePasswordSuccess.cshtml
-ChangePassword.cshtml

& AccountController.cs oczywiście ..

Ktoś zna rozwiązanie?

Oto kod:

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

    } 
} 
+2

Tytuł twojego pytania to Twoja odpowiedź – Rohit

Odpowiedz

5

Z Twojego kodu wygląda na to, że chcesz porównać swoje hasło z hasłem potwierdzenia. Jeśli tak jest, Twój atrybut nie jest poprawny. to powinno być

Masz już żądaną przestrzeń nazw dodaną w kodzie. Możesz przeczytać więcej na ten temat here.

+0

Dzięki! To zadziałało – Pex

0

Dodaj odwołanie do zespołu System.Web.Mvc.dll!

+1

ma już to – Ehsan

1

Istnieją 2 Atrybuty w .NET Prawdopodobnie jeden w przestrzeni nazw System.Web.Mvc.CompareAttribute znajduje się w zespole System.Web.Mvc.dll będzie wykonać zadanie.

Istnieje jeszcze jeden (duplikat), który robi to samo. Pełna ścieżka to System.ComponentModel.DataAnnotations.CompareAttribute w zestawie System.ComponentModel.DataAnnotations.dll, który jest tym, do którego się odwołujesz, tak jak widzę. W takim przypadku prawdopodobnie będziesz potrzebować odniesienia do biblioteki DLL, aby sprawdzić, czy nie odwołujesz się do obu, ponieważ może to również prowadzić do problemów. nie wydaje się, że to jest problem, o którym właśnie wspomniałem.

1

Miałem ten sam błąd. I zdałem sobie sprawę, że kiedy używałem .net 4.0, System.Web.Mvc; i System.ComponentModel.DataAnnotations; używa to Rozwiązane. Ale kiedy zmienił ramy o 4,5 błąd był

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

i

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

Wnioski jeżeli ramy jest 4,0

System.Web.Mvc; 

System.ComponentModel.DataAnnotations; 

i przebudowany projekt innego jeśli ramowe 4.0

System.ComponentModel.DataAnnotations; 

i przebudowany projekt

Nie zapomnij zawsze Uruchom Visual Studio jako (w) (tryb administratora)

+0

To właśnie mi się przydarzyło. Ale w wersji 4.0, usunięcie odniesienia do System.Web.Mvc nie rozwiązuje problemu. – arame3333

2

moich okoliczności coraz to był błąd, że próbowałem uaktualnić .Net framework 4.5 od 4.0. To nie zadziałało i wróciłem do wersji 4.0 i otrzymałem ten błąd.

naprawiłem ten błąd kompilacji poprzez umieszczenie w

[System.Web.Mvc.Compare]

1

Jeśli używasz klasę dla Web API, wyjąć „używając System.Web.Mvc; " i zmień na "using System.Web.Http;" i pozostawić słowo kluczowe "Porównaj" takie jakie jest. Ale jeśli używasz czystego MVC, zmień słowo kluczowe "Porównaj" na "PorównajAttribute".

System.ComponentModel.DataAnnotations; jest potrzebny w obu scenariuszach do zatwierdzania. Ale "Porównaj" lub "Porównaj atrybut" nie jest wyłącznie do sprawdzania poprawności. Jest to obiekt zapewniany przez system oparty na jego wzorze architektonicznym (MVC lub RestFul Web API). To użyć klasy atrybutu w celu uproszczenia odnoszenia się i korzystania z „siłownia Porównaj”

0

Proste, prefiks z nazw:

System.ComponentModel.DataAnnotations.Compare 

Jak wszystkich innych atrybutów, takich jak [Wymagane] [Display] itp wszystko użyj tej przestrzeni nazw, to znaczy, że ma powód.

Kompilator jest zdezorientowany, ponieważ przestrzeń nazw System.Web.Mvc ma również metodę o nazwie "Porównaj", więc Framework 4.5 chce, abyś był jawny i usunął niejednoznaczność. Jeśli najedziesz kursorem na inne atrybuty, zobaczysz, że używają przestrzeni nazw System.ComponentModel.DataAnnotations, ale nie muszą być kwalifikowane, ponieważ nie kolidują z innymi obszarami nazw, podczas gdy [Porównaj] istnieje w obu obszarach nazw. Zabawne, jak Framework 4 działa to na zewnątrz ale Framework 4.5 musi być powiedziano ...

0

Aby uczynić tę pracę między .NET4 i .NET45 trzeba zmienić za pomocą dwóch sprawozdań w tych plikach do:

using System.ComponentModel.DataAnnotations; 
using CompareAttribute = System.Web.Mvc.CompareAttribute; 
Powiązane problemy