Ich versuche, MVC für ein neues Projekt zu verwenden, nachdem ich mit all den Beispielen und Tutorials und so um den Block gegangen bin. Allerdings habe ich eine harte Zeit herauszufinden, wo bestimmte Dinge stattfinden sollte.
Ich habe zum Beispiel eine Entität namens Profil. Diese Entität enthält den normalen Profiltyp zusammen mit einer DateOfBirth-Eigenschaft vom Typ DateTime. Auf dem HTML-Formular ist das Feld für das Geburtsdatum in 3 Felder aufgeteilt. Ich weiß, dass ich einen benutzerdefinierten Modellbinder verwenden kann, um dies zu behandeln, aber was ist, wenn das eingegebene Datum kein gültiges Datum ist? Sollte ich das im Model Binder überprüfen? Sollte die gesamte Validierung im Modellbinder stattfinden? Ist es in Ordnung, nur ein paar Dinge im Model Binder zu validieren und den Rest im Controller oder dem Modell selbst?
Hier ist der Code, den ich jetzt habe, aber er sieht für mich einfach nicht richtig aus. Sieht schmutzig oder stinkend aus.
namespace WebSite.Models
{
public class ProfileModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
DateTime birthDate;
var form = controllerContext.HttpContext.Request.Form;
var state = controllerContext.Controller.ViewData.ModelState;
var profile = new Profile();
profile.FirstName = form["FirstName"];
profile.LastName = form["LastName"];
profile.Address = form["Address"];
profile.Address2 = form["Address2"];
profile.City = form["City"];
profile.State = form["State"];
profile.Zip = form["Zip"];
profile.Phone = form["Phone"];
profile.Email = form["Email"];
profile.Created = DateTime.UtcNow;
profile.IpAddress = controllerContext.HttpContext.Request.UserHostAddress;
var dateTemp = string.Format("{0}/{1}/{2}",
form["BirthMonth"], form["BirthDay"], form["BirthYear"]);
if (string.IsNullOrEmpty(dateTemp))
state.AddModelError("BirthDate", "Required");
else if (!DateTime.TryParse(dateTemp, out birthDate))
state.AddModelError("BirthDate", "Invalid");
else
profile.BirthDate = birthDate;
return profile;
}
}
}
Aufbauend auf dem Beispielcode oben, wie würden Sie die Validierung Nachricht für ein 3-Teil-Feld tun? Im obigen Fall verwende ich einen völlig separaten Schlüssel, der nicht wirklich einem Feld im Formular entspricht, weil ich nicht möchte, dass eine Fehlermeldung neben allen 3 Feldern erscheint. Ich möchte, dass sie nur rechts neben dem Feld "Jahr" erscheint.
0 Stimmen
Sind Sie auf der Suche nach einer Modellvalidierung oder einer Formularvalidierung? Ich würde beides empfehlen. Auf diese Weise können Sie moq das Modell als auch eine reiche UI auf dem Frontend bieten.