Frage

Ich habe die Methode dieses Controllers zum Erstellen

[HttpPost]
    public ActionResult Create(Topic topic)
    {
        if (ModelState.IsValid)
        {
            topicRepo.Add(topic);
            topicRepo.Save();

            return RedirectToAction("Details", new { id = topic.ID });
        }
        return View(topic);
    }

und das für die Bearbeitung

        [HttpPost]
        public ActionResult Edit(int id, FormCollection formCollection)
        {
            Topic topic = topicRepo.getTopic(id);
            if (ModelState.IsValid)
            {
                UpdateModel<Topic>(topic);
                topicRepo.Save();
                return RedirectToAction("Details", new { id = topic.ID });
            }
            return View(topic);
        }

Beide Methoden verwenden eine gemeinsame Teilseite (.ascx).

Die Validierung funktioniert, wenn ich versuche, ein Thema zu erstellen, aber nicht funktioniert, wenn ich versuche, es zu bearbeiten

War es hilfreich?

Lösung

Das ist normal. Im ersten Beispiel verwenden Sie ein Modell als Aktionsparameter. Wenn der Standardmodellbinder versucht, dieses Modell an die Anforderung zu binden, wird automatisch Validierung aufgerufen und wenn Sie die Aktion eingeben, die ModelState.IsValid ist bereits zugewiesen.

Im zweiten Beispiel ist Ihre Aktion kein Modell, nur eine Schlüssel-/Wertsammlung und ohne Modellvalidierung ist keinen Sinn. Die Validierung wird durch die ausgelöst UpdateModel<TModel> Methode, die in Ihrem Beispiel aufgerufen wird nach das ModelState.IsValid Anruf.

Sie könnten das also versuchen:

[HttpPost]
public ActionResult Edit(int id)
{
    Topic topic = topicRepo.getTopic(id);
    UpdateModel<Topic>(topic);
    if (ModelState.IsValid)
    {
        topicRepo.Save();
        return RedirectToAction("Details", new { id = topic.ID });
    }
    return View(topic);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top