2016-04-15 5 views
0

Ich arbeite gerade an einer Website in MVC4 und versuche, die jQuery-Validierung zu implementieren.Entfernen des Modellstatusfehlers aus der Sicht nach neuer Texteingabe

Ich habe ein Model meiner http Post, die einen Fehler gibt, wenn der Benutzername, das ist in der model.Username Textbox existiert nicht gefüllt:

ModelState.AddModelError("UsernameNull", "Username does not exist"); 

Und die EditorFor & Validation Nachricht aus meiner Sicht:

Es zeigt erfolgreich den Fehler "Benutzername existiert nicht" nach dem Post, aber das Problem ist, dass der Fehler auf der Ansichtsseite bleibt. Was ich erreichen möchte, ist, wenn neue Eingabe in das Textfeld model.Username eingegeben wird, dass der Fehler verschwindet.

+0

Bei benutzerdefinierten ModelState-Fehlern müssen Sie JavaScript schreiben, um den Wert selbst zu testen, und dann den Fehler selbst entfernen. – krillgar

+0

Zunächst muss es 'ModelState.AddModelError (" Benutzername "," Benutzername existiert nicht ");' und '@ Html.ValidationMessage (" Benutzername ")' um den Eigenschaftsnamen zu entsprechen. Sie haben keine Eingabe mit 'name =" BenutzernameNull "' so gibt es keine '.blur()' von '.keyup()' Ereignissen, die von 'jquery.validate.js' behandelt werden können, um die Fehlermeldung zu entfernen . Mit dem Attribut '[Remote]' wird dies jedoch weitaus besser gehandhabt. [Vorgehensweise: Implementieren der Remoteüberprüfung in ASP.NET MVC] (https://msdn.microsoft.com/en-us/library/gg508808 (VS.98) .aspx) –

Antwort

0

Ich würde vorschlagen, Data Annotation Validatoren, die Sie Validierung einfach durch Hinzufügen eines oder mehrerer Attribute zu einer Klasse-Eigenschaft ermöglicht.

using System.ComponentModel.DataAnnotations; 

namespace MvcApplication.Models 
{ 
    public class MyModel 
    { 
     [Required(ErrorMessage = "User name is required")] 
     [DisplayName("User Name")] 
     public string UserName { get; set; } 
    }  
} 

Die folgende Controller-Aktion zeigt jetzt wieder den Blick, wenn Modellzustand Fehler enthält

[HttpPost] 
public ActionResult MyAction(MyModel model){ 
    if(!ModelState.IsValid) 
     return View(); 

    // Insert logic here 
    //return RedirectToAction("Index"); 
} 

Schließlich Ihrer Ansicht nach sollten Sie in der Lage sein

<div class="error-container"> 
    @Html.ValidationMessage("UserName", "*", new { @class = "error-container-error" }) 
</div> 

zu verwenden Wenn Sie versuchen, die POST Wenn das Textfeld UserName leer ist, sollte die in Ihrer Klasse definierte Validierungsnachricht angezeigt werden.

Verwandte Themen