我正在关注这个示例:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation并试图实现我自己的自定义属性进行验证。在AddValidation方法中访问模型数据asp.net核心自定义验证
现在,viewmodel有两个字段,我希望从该方法内部访问,以便可以使用“data-val”属性呈现它们。我的问题是,我怎么能从上下文在这里说一个名为“Myprop”的属性?当我调试时,我可以选择context.ActionContext.ViewData.Model下的信息,但在调试时,我无法获得该信息,因为我使用Visual Studio“快速监视”功能。自定义属性位于视图模型上的属性上。
public void AddValidation(ClientModelValidationContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
MergeAttribute(context.Attributes, "data-val", "true");
MergeAttribute(context.Attributes, "data-val-classicmovie", GetErrorMessage());
var year = _year.ToString(CultureInfo.InvariantCulture);
MergeAttribute(context.Attributes, "data-val-classicmovie-year", year);
}
太棒了!在我接受答案之前,我会稍微尝试一下,然后回复给你回答 –
我可以问问你的其他实现是怎么样的?在制作自定义属性时,您需要继承ValidationAttribute,那么您如何从DefaultValidationHtmlAttributeProvider继承并定制它并使用自定义逻辑进行重写? –
您无法从属性中执行此操作。您无法访问模型,并且触发装饰器属性验证的逻辑不会传递该模型。这是设计的原因,因为迭代您的属性以构建元数据和验证规则的结果只会被解雇一次然后缓存。所以它不能依赖于模型。我会在答案中充实我的例子。 –