2016-07-21 16 views
0

Ich versuche, ein Projekt aus diesem Lehrbuch namens Anfang ASP.NET MVC 4 von Jose Rolando Guay Paz neu erstellen. Ich habe ein wenig Probleme mit der Datenvalidierung mit Datenannotationen, die Teil von System.ComponentModel.DataAnnotations sind.Warum funktioniert die Asp.net-Validierung mit Datenanmerkungen nicht?

Hier ist einer meiner Controller.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using HaveYouSeenMe.Models; 
using System.ComponentModel.DataAnnotations; 

namespace HaveYouSeenMe.Controllers 
{ 
    public class MessageController : Controller 
    { 
     // 
     // GET: /Message/ 

     [Required(ErrorMessage = "Please type your name")] 
     [StringLength(150, ErrorMessage = "You can only add upto 150 characters")] 
     [FullName(ErrorMessage = "Please type your full name")] 
     public string From { get; set; } 

     [Required(ErrorMessage = "Please type your email address")] 
     [StringLength(150, ErrorMessage = "You can only add upto 150 characters")] 
     [EmailAddress(ErrorMessage = "We don't recognize this as a valid email address")] 
     public string Email { get; set; } 

     [StringLength(150, ErrorMessage = "You can only add upto 150 characters")] 
     public string Subject { get; set; } 

     [Required(ErrorMessage = "Please type your message")] 
     [StringLength(1500, ErrorMessage = "You can only add upto 1500 characters")] 
     public string Message { get; set; } 

     public ActionResult Send() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Send(MessageModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       return RedirectToAction("ThankYou"); 
      } 
      ModelState.AddModelError("", "One or more errors were found"); 
      return View(model); 
     } 

     public ActionResult ThankYou() 
     { 
      return View(); 
     } 
    } 
} 

und dies ist die entsprechende Ansicht für die Aktion Senden.

Wenn ich meine Anwendung ausführen und die Anfrage/Nachricht/senden, bekomme ich diese Ansicht.

enter image description here

Nun, wenn ich die Nachricht klicken, soll ich Validierungsfehler wie folgt aus (nach Lehrbuch und auch das ist, was ich tun will) erhalten.

enter image description here

Aber ich wird auf ThankYou Seite umgeleitet, die im Grunde eine andere Aktion, die ich geschrieben habe (Sie können meine MessageController oben überprüfen). Warum passiert das? Ich folgte dem Lehrbuch genau und ich überprüfte meinen Code mehrmals, aber ich kann es nicht herausfinden.

P.S: Wenn weitere Details benötigt werden, um dies zu lösen, bitte sagen Sie mir, ich werde die Details für meine Frage aktualisieren.

+0

Überprüfen Sie zunächst, ob generiertes HTML über "Daten-" Validierungsattribute verfügt. –

+1

Die Datenannotation sollte in der Modellklasse und nicht auf dem Controller erfolgen. –

+1

Ich nehme an, Sie haben einen falschen Code geschrieben. Diese Eigenschaften sollten in 'class MessageModel' sein, nicht in' class MessageController' –

Antwort

1

Wahrscheinlich haben Sie das Sample falsch gelesen.

Die Eigenschaften, die Sie in der MessageController aufgelistet haben, sollten in der Modellklasse definiert werden - HaveYouSeenMe.Models.MessageModel - nicht in der Steuerung. Und wahrscheinlich sind sie dort bereits definiert, aber die Anmerkungen nicht.

Sie müssen die Datenanmerkungen vom Controller in die Modellklasse verschieben. Dann können Sie die Eigenschaften in der Steuerung loswerden, nur die letzten zwei Methoden zu verlassen.