ProblemJak uzyskać klucz ModelState elementu w liście
Mam listę pól, które użytkownik może edytować. Po przedłożeniu modelu chcę sprawdzić, czy te elementy są prawidłowe. Nie mogę używać notacji danych, ponieważ każde pole ma inny proces sprawdzania poprawności, którego nie będę znać przed uruchomieniem. Jeśli sprawdzanie poprawności nie powiedzie się, używam ModelState.AddModelError(string key, string error)
, gdzie klucz jest nazwą elementu html, do którego chcesz dodać komunikat o błędzie. Ponieważ istnieje lista pól, nazwa Razor generuje dla elementu html jest podobna do Fields[0].DisplayName
. Moje pytanie dotyczy metody lub sposobu uzyskania klucza wygenerowanej nazwy html z modelu widoku?
Próba Rozwiązanie
Próbowałem metody toString()
dla klucza bez powodzenia. Przeglądałem też klasę HtmlHelper
, ale nie widziałem żadnych pomocnych metod.
Code Snippet
Widok Model
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; }
}
}
Controller
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);
}
}
To jest dobre, ale właśnie znalazłem inny post, który owija tę logikę w przyjemną metodę rozszerzenia: http://stackoverflow.com/a/12689563/1825109 – Michael12345