2016-04-12 8 views
-1

Ich kann nicht scheinen, die Validierungsfehlermeldungen unter den Eingabemodellfeldern in der Ansicht anzuzeigen.Validierung wird ausgelöst, zeigt jedoch keine Meldung bei Fehler an. Was vermisse ich? MVC 5 Razor

Der Tag [Erforderlich] oberhalb der Beschreibung-Eingabe macht den ModelState ungültig, stoppt die Übermittlung jedoch nicht. Ich muss es abfangen, indem ich den Modellzustand überprüfe. Fehle ich einige .js-Dateien? Ich habe keine Beispiele, um dies zu überprüfen.

Hier mein Modell ist (man beachte ich habe nur eine [Erforderlich] bis jetzt):

public partial class Requests 
{ 
    public int RequestID { get; set; } 
    public string NickName { get; set; } 
    public Nullable<double> Lat { get; set; } 
    public Nullable<double> Lng { get; set; } 
    public string ZipCode { get; set; } 
    [Required(ErrorMessage = "Description of what you need is missing.")] 
    public string Description { get; set; } 
    public System.DateTime DateCreated { get; set; } 
} 

Hier ist meine Ansicht ist, wo die Beschreibung Eingang Eingang benötigt.

<div class="form-group"> 
    @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.TextAreaFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @rows = "20", @cols = "200" } }) 
     @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" }) 
    </div> 
</div> 

Hier mein Controller Action ist (skinnied unten)

if (ModelState.IsValid) 
{ 
//THIS ALL WORKS IF Description HAS INPUT 

} 
else 
{ 
    TempData["Saved"] = "Nothing saved yet. Look for reason."; 
return RedirectToAction("StoreRequests", new { lat = requests.Lat, lng = requests.Lng }); 
} 

Auf ModelState Ausfall der Benutzer auf die richtige Ansicht gerichtet ist und TempData zeigt, dass nichts gespeichert wurde. Es wird jedoch keine Fehlermeldung in der Ansicht unter der problematischen Eingabe angezeigt, keine ValidationSummary am oberen Rand der Ansicht, und die Übermittlung wird bei Eingabefehlern nicht gestoppt.

@if(TempData["Saved"] != null) 
{ 
    <span style="color: red;">@TempData["Saved"].ToString()</span> 
} 
<hr /> 
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
+0

Vielen Dank Stephen. Ich habe diese 2 hinzugefügt und es hat funktioniert. Wahrscheinlich hatte ein paar mehr in der _Layout.cshtml. Wenn Sie es eine Antwort machen wollen, werde ich es annehmen. – JustJohn

+0

Ich bin mir nicht sicher, warum ich eine Abstimmung bekommen habe. oh well – JustJohn

Antwort

1

Um Client-seitige Validierung zu erhalten (und damit zu verhindern, dass die Form, wenn seine ungültig vorgelegt werden), müssen Sie die folgenden Skripte sind in Ihnen (oder Layout) anzuzeigen.

jquery-{version}.js 
jquery.validate.js 
jquer.validate.unobtrusive.js 

Wenn Sie die Standardpakete einrichten von VS haben, wenn Sie ein neues Projekt anlegen, können Sie einfach fügen Sie den folgenden auf die Ansicht

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

Darüber hinaus sollten Sie sich nicht, wenn ModelState Umleitung werden ist ungültig, gibt aber die aktuelle Ansicht zurück, die alle Validierungsfehler anzeigt, selbst wenn der Benutzer Javascript deaktiviert hat. Durch Umleiten verlieren Sie Ihre aktuelle ModelState, so dass keine Validierungsfehler in der Ansicht angezeigt werden, zu der Sie weitergeleitet werden, ganz zu schweigen davon, dass alle Daten, die der Benutzer zuvor ausgefüllt hat (außer den 2 Parametern, die Sie übergeben) verloren gehen.

public ActionResult Edit (Requests model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 
    // save you data and redirect 
} 
+0

Nein. Ich möchte deine Zeit Stephen nie verschwenden. Du hast so viele Dinge für mich gelöst. Entschuldige, dass ich so lange gebraucht habe. Ich hatte nur andere Dinge, die mich vom Computer fernhielten. – JustJohn

+0

Auf ModelState Ungültig Ich kehre zur vorherigen Ansicht zurück, aber ich sende ihm auch eine Fehlermeldung in TempData und sende ihm dieselben Längen/Längen, um die Google Maps erneut zu füllen. Vielleicht gibt es einen schöneren Weg, aber ich bezweifle, dass mein Weg jemals in einer Million Jahren brechen wird. – JustJohn

+0

@JustJohn, Sie sollten 'TempData' nicht dafür verwenden. Fügen Sie einfach einen 'ModelState'-Fehler hinzu und geben Sie die Ansicht zurück. 'Modellstatus.AddModelError ("", "Noch nichts gespeichert. Suche nach Gründen."); return View (model); 'und es wird in der' @ Html.ValidationSummary() 'angezeigt. Aber was soll das heißen - wenn 'ModelState' ungültig ist und Sie die Ansicht zurückgeben, werden alle Fehlermeldungen trotzdem in der' @ Html.ValidationFor (m => m.yourProperty) 'angezeigt. Unter keinen Umständen sollten Sie umleiten, wenn 'ModelState' ungültig ist. –

0

Fügen Sie die folgenden erforderlichen scripts direkt in Ihrem .cshtml Datei.

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script> 
<script src="/Scripts/jquery.validate.js"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.js"></script> 
Verwandte Themen