2013-08-17 4 views
5

Sto tentando di aggiungere un amministratore al mio sito. Il problema si trova sul mio accountModels.csIl tipo o lo spazio dei nomi Non è stato possibile trovare il confronto (manca una direttiva using o un riferimento all'assembly?)

Semplicemente deve confrontare i dati implementati ma mi sembra di ottenere questo errore.

Ho anche una vista con:
-Register.cshtml
-LogOn.cshtml
-ChangePasswordSuccess.cshtml
-ChangePassword.cshtml

& un AccountController.cs ovviamente ..

Qualcuno conosce una soluzione?

Ecco il codice:

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

Il titolo della tua domanda è la tua risposta – Rohit

risposta

5

Dal tuo codice sembra che tu voglia confrontare la tua password con conferma password. Se è così allora il tuo attributo

Compare 

non è corretto. dovrebbe essere

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

Hai già lo spazio dei nomi desiderato aggiunto nel codice. Potete leggere di più su di esso here.

+0

Grazie! Questo ha funzionato – Pex

0

Aggiungere un riferimento alla System.Web.Mvc.dll di montaggio!

+1

che ha già quel – Ehsan

1

Ci sono 2 attributi in .NET Probabilmente quello nel namespace System.Web.Mvc.CompareAttribute situato nell'assieme System.Web.Mvc.dll farà il lavoro.

C'è un altro (duplicato) che fa la stessa cosa. Il percorso completo è System.ComponentModel.DataAnnotations.CompareAttribute nell'assembly System.ComponentModel.DataAnnotations.dll che è quello a cui si sta riferendo come posso vedere. Poi si sarebbe probabilmente bisogno di un riferimento alla DLL System.ComponentModel.DataAnnotations.dll

si può verificare se non si è fatto riferimento sia, perché questo può anche portare a problemi. non sembra che questo sia il problema, sto solo citando.

1

Ho avuto lo stesso errore. E ho capito che quando stavo usando .net 4.0 gli usi System.Web.Mvc; e System.ComponentModel.DataAnnotations; Risolto. Ma quando ho cambiato il quadro o 4,5 l'errore è stato

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

e

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

Conclusione se il quadro è 4,0

System.Web.Mvc; 

System.ComponentModel.DataAnnotations; 

e ricostruito il progetto altrimenti se il quadro è 4.0

System.ComponentModel.DataAnnotations; 

e ricostruito il progetto

Non dimenticare di eseguire sempre Visual Studio come (a) Amministratore (Modalità)

+0

Questo è quello che mi è successo. Ma nella versione 4.0 del framework, la rimozione del riferimento a System.Web.Mvc non risolve il problema. – arame3333

2

mie circostanze a ottenere questo errore è stato che ho cercato di effettuare l'aggiornamento a .Net framework 4.5 dalla 4.0. Questo non ha funzionato e sono tornato alla 4.0 e ho ricevuto questo errore.

Ho fissato questo errore di generazione mettendo in

[System.Web.Mvc.Compare]

1

Se si utilizza la classe per l'API Web, estrarre il "usando System.Web.Mvc; " e passare a "using System.Web.Http;" e lascia la parola chiave "Confronta" così com'è. Ma se si sta utilizzando per puro MVC, modificare la parola chiave "Confronta" con "CompareAttribute".

System.ComponentModel.DataAnnotations; è necessario per entrambi gli scenari per le convalide. Ma "Compare" o "CompareAttribute" non è per la validazione puramente. È una funzione fornita dal sistema in base al suo modello architettonico (MVC o RestFul Web API). E utilizzare la classe di attributo da semplificare di riferimento e l'utilizzo del "facility Confronta"

0

Semplice, il prefisso con lo spazio dei nomi:

System.ComponentModel.DataAnnotations.Compare 

Come tutti gli altri attributi, come [Required], [Display] ecc tutti usa questo spazio dei nomi quindi è ragionevole.

Il compilatore viene confuso perché lo spazio dei nomi System.Web.Mvc ha anche un metodo chiamato "Confronta", quindi Framework 4.5 vuole che tu sia esplicito e rimuovere l'ambiguità. Se si posiziona il puntatore del mouse sugli altri attributi, si vedrà che utilizzano lo spazio dei nomi System.ComponentModel.DataAnnotations ma non è necessario qualificarsi poiché non sono in conflitto con altri spazi dei nomi, mentre [Confronta] esiste in entrambi gli spazi dei nomi. Buffo come funziona Framework 4 fuori ma Framework 4.5 deve essere raccontata ...

0

per fare questo lavoro tra .NET4 e .NET45 è necessario cambiare le due dichiarazioni utilizzando in questi file a:

using System.ComponentModel.DataAnnotations; 
using CompareAttribute = System.Web.Mvc.CompareAttribute; 
Problemi correlati