So erhalten Sie einen ModelState-Schlüssel für ein Element in einer Liste

Problem

Ich habe eine Liste von Feldern, die der Benutzer bearbeiten kann. Wenn das Modell eingereicht wird, möchte ich überprüfen, ob diese Artikel gültig sind. Ich kann keine Datennotationen verwenden, da jedes Feld einen anderen Validierungsprozess hat, den ich erst zur Laufzeit kenne. Wenn die Validierung fehlschlägt, verwende ich dasModelState.AddModelError(string key, string error) Dabei ist der Schlüssel der Name des HTML-Elements, dem Sie die Fehlermeldung hinzufügen möchten. Da es eine Liste von Feldern gibt, ist der Name, den Razor für das HTML-Element generiert, ähnlichFields[0].DisplayName. Meine Frage gibt es eine Methode oder einen Weg, um den Schlüssel des generierten HTML-Namens aus dem Ansichtsmodell zu erhalten?

Versuchte Lösung

Ich habe es versuchttoString() Methode für den Schlüssel ohne Glück. Ich schaute auch durch dieHtmlHelper Klasse, aber ich habe keine hilfreichen Methoden gesehen.

Code-Auszug

Modell anzeigen

public class CreateFieldsModel
{
    public TemplateCreateFieldsModel()
    {
        FreeFields = new List<FieldModel>();
    }

    [HiddenInput(DisplayValue=false)]
    public int ID { get; set; }

    public IList<TemplateFieldModel> FreeFields { get; set; }


    public class TemplateFieldModel
    {
        [Display(Name="Dispay Name")]
        public string DisplayName { get; set; }

        [Required]
        [Display(Name="Field")]
        public int FieldTypeID { get; set; }
    }
}

Regler

public ActionResult CreateFields(CreateFieldsModel model)
{
    if (!ModelState.IsValid)
    {
        //Where do I get the key from the view model?
        ModelState.AddModelError(model.FreeFields[0], "Test Error");
        return View(model);
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage