You can use an extension that does the same as the HtmlHelpers, and that will work for nested properties:
public static class ModelStateExtensions
{
public static void AddModelError<TModel>(this ModelStateDictionary dictionary, Expression<Func<TModel, object>> expression, string errorMessage)
{
dictionary.AddModelError(ExpressionHelper.GetExpressionText(expression), errorMessage);
}
}
So you can use it like this:
ModelState.AddModelError<TModel>(i => i.Person.Name, "test");
equivalent to
ModelState.AddModelError("Person.Name", "test");
It will generate the same Id as the Html. In the MVC source they do some extra sanitizing, but with normal names that shouldn't be a problem.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…