【发布时间】:2012-08-17 17:37:20
【问题描述】:
所以我正在尝试在控制器中获取模型对象的密钥,以便可以向其中添加 AddModelError。
在我看来,我使用
@Html.ValidationMessageFor(model => model.Email)
获取Key 名称以添加到控制器中的等效代码是什么,以便它附加到此ValidationMessage。
【问题讨论】:
标签: c# asp.net-mvc
所以我正在尝试在控制器中获取模型对象的密钥,以便可以向其中添加 AddModelError。
在我看来,我使用
@Html.ValidationMessageFor(model => model.Email)
获取Key 名称以添加到控制器中的等效代码是什么,以便它附加到此ValidationMessage。
【问题讨论】:
标签: c# asp.net-mvc
您可以使用与 HtmlHelpers 功能相同的扩展,并且适用于嵌套属性:
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);
}
}
所以你可以这样使用它:
ModelState.AddModelError<TModel>(i => i.Person.Name, "test");
相当于
ModelState.AddModelError("Person.Name", "test");
它将生成与 Html 相同的 Id。在 MVC 源代码中,他们做了一些额外的清理工作,但使用正常的名称应该不成问题。
【讨论】:
ModelState.AddModelError("Email", "the email is invalid");
但通常这不是您应该在控制器中手动执行的操作,但您应该使用验证器。例如,您可以使用一些验证数据注释属性来装饰此 Email 属性,或者如果您像我一样使用 FluentValidation.NET => 这样您不应该问自己有关键的问题,而是专注于实际的验证逻辑。
【讨论】:
null。