2

In meiner MVC3 Anwendung ausgelöst Ich habe das Modell (nicht wichtige Eigenschaften gelöscht):Validierung Attribut zweimal erhält

public class AccountViewModel 
{ 
    [StringLength(65)] 
    public string Property1 { get; set; } 

    [StringLength(65)] 
    public string Property2 { get; set; } 
} 

Das Problem ist, wenn eine Aktion submited ist Attribut Validierung zweimal aufgerufen, und ich kann 4 Fehlermeldungen erhalten Zusammenfassend, anstelle von 2:

'Property1' length must be less than 65 characters 
'Property1' length must be less than 65 characters 
'Property2' length must be less than 65 characters 
'Property2' length must be less than 65 characters 

Ich verwende nicht Validate-Methode in meinem Controller-Code. Das Problem tritt auch mit meinen benutzerdefinierten Attributen auf, aber es tritt nicht mit Required-Attribut auf. Auch muss ich, dass Ctor der benutzerdefinierten beachten Sie auch zweimal

genannt Attribute Meine Aktion

[HttpPost] 
public ActionResult CreateOrEdit(AccountViewModel model) { 

    if (!ModelState.IsValid) { 
     return View("Edit", model); 
    } 

    try { 
     _accountService.InsertOrUpdate(model); 

    } 
    catch (Exception ee) { 
     ModelState.AddModelError("", ee.Message); 
     return View("Edit", model); 
    } 

    return RedirectToAction("Index"); 
} 

anzeigen, auf die ich machen meine Fehler mit:

@{ 
    var errors = ViewData.ModelState.Errors(); 
    <div class="alert alert-block alert-error @(errors.Count == 0 ? "hide" : "")" > 
    <h4 class="alert-heading"> You got an error!</h4> 
    <ul> 
     @foreach (var error in errors) { 
      <li>@error</li> 
     } 
    </ul> 
    </div> 
} 

Und ich verdoppeln Wieder nochmals überprüfen dass ViewData.ModelState bereits zweimal Fehler enthält.

+0

Hmmm Sie haben 55 in Attribut-Deklaration und 65 Wert in Fehlermeldung –

+0

können Sie die Aktion posten? Bestätigen Sie außerdem, dass Sie "ValidationSummary" in Ihrer Ansicht nicht zweimal aufrufen. –

+0

aktualisiert mit Action-Code @Steve Mallory – bogert

Antwort

2

Das Problem lag in der Integration von Ninject. Wenn Sie Ninject.MVC Paket verwenden (ich verwende Version 3) registriert er seine eigene ModelValidationProvider während der Initialisierung und entfernt die alte:

In Ninject.Web.Mvc.MvcModule

this.Kernel.Bind<ModelValidatorProvider>().To<NinjectDataAnnotationsModelValidatorProvider>(); 

In Ninject.Web.Mvc.NinjectMvcHttpApplicationPlugin:

public void Start() 
{ 
    ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().Single()); 
    DependencyResolver.SetResolver(this.CreateDependencyResolver()); 
    RemoveDefaultAttributeFilterProvider(); 
} 

Also, anstatt meine eigene Implementierung von idep Schaffung ennacyResolver (Ninject Kernel wrapper) Ich folgte diesem tutorial oder Sie sollten Ninject.MVC-Paket entfernen und entfernen Sie die Binärdateien aus dem Ordner bin.

+0

Die Ninject-Erweiterung verursacht dieses Problem nicht, wenn sie korrekt verwendet wird. Althouth ohne zu wissen, wie Sie Ninject einrichten, ist es unmöglich, Ihnen eine Antwort zu geben. –

+0

Sie richtig, ich habe es falsch verwendet, jetzt, wenn es korrekt installiert ist - alles ist in Ordnung @RemoGloor – bogert

+2

@bogert, was bedeutet "_wenn es korrekt installiert ist_"? könnten Sie bitte erklären? –

Verwandte Themen