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);
}
}