2016-05-06 15 views
0

In regulären Asp.Net, wenn Sie einen Fehler, z. B. eine doppelte ID, ich Panels für Kontrollen, Fehlermeldung Etiketten, etc. Ich frage mich, wie man das erreichen Gleiches mit MVC 4.Post zurück Fehler in MVC 4

Momentan habe ich auf meiner Indexseite eine ID, Name & Adressspalte und eine Submit-Schaltfläche. Meine Httppost Action hier:

[HttpPost] 
    public ActionResult Index(Person p) 
    { 
     if (ModelState.IsValid) 
     { 
      PersonInfo pi = new PersonInfo(); 

      var duplicate = from d in db.PersonInfoes 
       where d.Id == p.Id 
       select d; 

      if (duplicate.Any()) 
      { 
       return View("Duplicate"); 
      } 
      else 
      {....} 

enter image description here

Wenn ich ein Duplikat Id, bei Vorlage der Seite eingeben, ich dieselbe Ansicht schreiben muß („Index“) Seite Benutzer weiß, dass es eine ID bereits, aber derzeit werde ich auf eine andere Ansicht umleiten, um den Benutzer als Duplikat zu informieren, und ich denke nicht, dass dies der richtige Weg ist, dies zu tun. Ich lerne MVC, BTW und damit diesen Zweifel. Meine doppelte cshtml hier:

@{ 
     ViewBag.Title = "Duplicate"; 
    } 

    <h2>Duplicate</h2> 

    <h3>Duplicate ID found !!</h3> 
    <p>Please correct the ID and re-enter !</p> 
    <br/><br/> 
    @Html.ActionLink("Back to Data Entry","Index") 

enter image description here

Alle Hinweise helfen würde.

Antwort

1

Sie können zur selben Ansicht zurückkehren. Sie sollten in Erwägung ziehen, dem Modellzustandsverzeichnis einen Fehler hinzuzufügen, damit Sie dies in der Benutzeroberfläche anzeigen können.

[HttpPost] 
public ActionResult Index(Person p) 
{ 
    if (ModelState.IsValid) 
    { 
     var duplicate= db.PersonInfoes.Where(s=>s.Id== p.Id); 
     if (duplicate.Any()) 
     { 
     ModelState.AddModelError(string.Empty,"Duplicate found"); 
     return View(p); 
     } 
     // to do : Your existing code 
    } 
    return View(p); 
} 

So stellen Sie sicher, dass Sie die ValidationSummary Methode in der Indexanzeige rufen diese Fehlermeldung zu zeigen.

@model Person 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(false) 

    <!-- Your form fields goes here--> 
    <input type="submit" /> 
} 
+0

Dank @Shyju, scheint interessante Lösung und funktioniert, außer, ich muss herausfinden, wie Sie den Fehler zum Modell State Dictionary hinzufügen. Atleast, jetzt, ohne es hinzuzufügen, wird es zurück zur gleichen Ansicht mit allen Variablen im Feld. – Ron

+1

'ModelState.AddModelError (string.Empty," Duplicate gefunden ");' ist, wie Sie den Fehler hinzufügen. Gehen Sie die Antwort noch einmal sorgfältig durch. – Shyju

+0

Ja, ich habe den ModelState.AddModelError (string.Empty, "Duplicate found") hinzugefügt; Vor. Aber jetzt, nach Ihrer Einsicht, habe ich @ Html.ValidationSummary (false) hinzugefügt und jetzt wird der Fehler als Duplicate gefunden. Danke eine Tonne, #Shyju, - 1 gekreuzt, 99 Millionen jetzt zu gehen;) – Ron