7

Ich bin mit Datenanmerkungen beschäftigt. Wenn ich auf einen Link klicke, um zu einer Seite zu gelangen, werden die Validierungsnachrichten angezeigt, aber ich möchte, dass die Validierungsnachrichten erst angezeigt werden, wenn Daten gesendet wurden.MVC Razor Validierungsfehler beim Laden der Seite, wenn keine Daten veröffentlicht wurden

Ausblick:

@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" }) 
@Html.ValidationSummary(true, "Registration Failed. Check your credentials") 
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.") 

Modell:

[Required(ErrorMessage = "Email is required")] 
[DataType(DataType.EmailAddress)] 
[EmailAddress] 
[Display(Name = "Email Address: ")] 
public string EmailAddress { get; set; } 

Controller:

[HttpGet] 
     public ActionResult AddUser() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult AddUser(UserCreateViewModel user) 
     { 
      if (ModelState.IsValid) 
      { 
       var success = UserRepository.AddUser(user); 

       if (success) 
       { 
        return View("Success"); 
       } 
      } 

      return View("AddUser"); 
     } 

Wie ich schon sagte, mein Problem tritt auf beim Laden der Seite der AddUser Ansicht. Wenn ich auf den Link klicke, um die AddUser-Seite anzuzeigen, werden nach dem Laden Validierungsnachrichten angezeigt. Zu diesem Zeitpunkt wurden noch keine Daten gesendet und das Modell ist leer.

Antwort

9

die Validierung Stil Set:

.validation-summary-valid { display:none; } 

So standardmäßig versteckt es ist. Ein Fehler wird dazu führen, dass es angezeigt wird.

+0

Ich benutzte eine benutzerdefinierte CSS-Datei und hatte aufhören, die alte Site.css einschließlich dieser (die Ihre obige Korrektur hatte) zu beheben mein Problem behoben. – allencoded

+1

Warum in aller Welt müssen wir es manuell tun. Warum wird das nicht vom Framework selbst gehandhabt? : - | – Unbreakable

8

Sie können Modellzustand nach der Bindung Benutzer löschen:

ModelState.Clear(); 

Dies geschieht, weil ModelBinderModelState auf die Bindung eingestellt werden. In jeder Aktion, die ein Modell bindet und eine Ansicht mit demselben Modell zurückgibt, haben Sie dieses Problem.

[HttpPost] 
public ActionResult AddUser(UserCreateViewModel user) 
{ 
    if (ModelState.IsValid) 
    { 
     var success = UserRepository.AddUser(user); 

     if (success) 
     { 
      return View("Success"); 
     } 
    } 

    ModelState.Clear(); // <------- 
    return View("AddUser"); 
} 
-1

$('.field-validation-error').html("");

0
.field-validation-valid { 
    display: none; 
} 

Immer dann, wenn die Überprüfung auslöst beim Laden der Seite, diese „.field-Validierung-gültig“ Wert wird auf das Klassenattribut des auslösenden Eingabeelement automatisch hinzugefügt.

Wenn Sie CSS hinzufügen, um keinen Wert als den Wert dieser bestimmten Klasse anzuzeigen, werden die Validierungsnachrichten beim ersten Laden der Seite nicht mehr angezeigt.

Die Bestätigungsmeldungen werden weiterhin normal angezeigt, nachdem das betreffende Eingabeelement berührt wurde.

+0

Möchten Sie erklären, wie dies die Frage von OP beantwortet? – AgapwIesu

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/17972335) – Sievajet