Frage

Aktualisieren des Model

Hallo, ich habe eine Frage über das Model in einem ASP.NET MVC-Controller.

Wenn der Benutzer eine bestimmte Option aus der Sicht auswählt, das Startdatum und Enddatum für die „Zertifizierung“ wird basierend auf den anderen der eingegebenen Daten eingestellt wird.

Das Problem dabei ist, die Zertifizierungsdaten wieder als null und unsere CertificationMetaData Klasse specifys die Felder wie [Erforderlich], so dass die Modelstate ist ungültig, sobald die Aktion Lasten.

Das Entfernen des ModelSate Fehler erlaubt dies manuell zu arbeiten, aber ich frage mich, ob es ein besserer Weg, dies zu tun ist? Gibt es eine Möglichkeit, das Model zu aktualisieren? Sollte ich die Felder nicht erforderlich machen? Oder soll ich einen Datumswert aus der Sicht mit Javascript hinzufügen?

public ActionResult Create(FormCollection fc, Certification certification, Absence absence)
{
    if (certification.CertificationTypeID == 1)
    {
        certification.CertificationStartDate = absence.StartDate;
        certification.CertificationEndDate = absence.StartDate.AddDays(7);
        this.ModelState.Remove("CertificationStartDate");
        this.ModelState.Remove("CertificationEndDate");
    }

    if (this.ModelState.IsValid)
    {
        // save
        return RedirectToAction("Index");
    }
     return View();
}

Auch wie man sehen kann ich den ID-Wert für die Zertifizierung Typen fest einprogrammiert. Was ist der beste Weg, um Werte mit Lookup-Tabelle Werten zu vergleichen? Ist eine Enumeration der beste Weg zu gehen?

Danke

War es hilfreich?

Lösung

Natürlich ist dies eine persönliche Sache, aber ich würde die Fehlermeldungen nicht entfernen.

Wenn ich für die einfache Lösung gehe dann würde ich das [Erforderlich] Attribut entfernen und Validierungscode an den Controller hinzuzufügen, um den Fehler zu addieren, wenn die Daten fehlten oder sie auf den alternativen Wert gesetzt, wenn es die richtige Art ist.

Wenn ich für die komplexere Lösung gehen würde ich die Validierung auf der Modellebene setzen. Möglicherweise eine Basisklasse oder und Schnittstelle, die das Modell implementieren müssen. A ValidationHelper Klasse mit einer statischen Validate (IValidate Objekt) Methode, die die ValidationAttributes und ruft eine Validate-Methode auf dem Modell inspizieren. Es wäre dann eine Sammlung von validationerrors zurückzukehren. Dann wird ein benutzerdefinierter Modelbinder würde geschrieben, dass die Modellvalidierung versteht und ordnet dieses Model Fehler.

Andere Tipps

Der folgende Ansatz frischt den Modellzustand und ermöglicht es Ihnen, Ihr Design-Modell in Einklang zu halten mit dem [erforderlich] Attributen etc.

In meinem Fall möchte ich mein Modell ein erforderliches Feld haben, dass normale Level-Benutzer eine API kann sich nicht ändern, also habe ich das getan:

ModelState.Remove("ChangeDate");
ModelState.Add("ChangeDate", new ModelState());
ModelState.SetModelValue("ChangeDate", new ValueProviderResult(club.ChangeDate, DateTime.Now.ToString(), null));

Auf diese Weise brauchen Sie nicht Ihre erforderlichen Felder zu entfernen, und Sie müssen auch nicht ein Datum in JavaScript liefern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top