gpt4 book ai didi

asp.net-mvc - 用于将错误添加到模型状态 MVC 验证的自动映射器映射

转载 作者:行者123 更新时间:2023-12-02 20:09:16 26 4
gpt4 key购买 nike

我有以下情况:域模型和 View 模型(DTO)。我使用数据注释在 DTO 上的客户端和服务器端执行数据验证。而且我还必须在域模型上执行业务规则。为此,我选择了企业库验证应用程序 block 。验证结果作为 ValidationResults 返回。我有一个扩展方法,可以复制 ValidationResults 中的错误,但问题是域模型不是 View 模型的 1:1 映射。我使用自动映射器来执行这些映射。所以我的问题是:有没有办法使用映射配置文件中定义的映射将错误消息从验证结果中的键复制到ModelState中的相应属性

最佳答案

我想出了这个解决方案:

public static class ModelStateExtensions
{
/// <summary>
///
/// </summary>
/// <typeparam name="Tin">ViewModel Type</typeparam>
/// <typeparam name="Tout">Domain ModelType</typeparam>
/// <param name="modelstate">controllers modelstate</param>
/// <param name="results">Results of validation</param>
public static void AddValidationResult<Tin, Tout>(this ModelStateDictionary modelstate, ValidationResults results)
where Tout : class
where Tin : class
{
var map = AutoMapper.Mapper.FindTypeMapFor<Tout, Tin>();
var properties = map.GetPropertyMaps();
string destinationPropertyName=string.Empty;
foreach (var result in results)
{
var property = properties.FirstOrDefault(pm => pm.SourceMember!=null && pm.SourceMember.Name.Equals(result.Key));
if (property!=null)
{
destinationPropertyName=property.DestinationProperty.Name;
}
else
{
destinationPropertyName=string.Empty;
}
modelstate.AddModelError(destinationPropertyName, result.Message);
}
}
}

我添加了一个扩展方法,该方法基于 AutoMapper 映射,我找到必须附加错误消息的属性。我希望这能涵盖各个方面。我欢迎任何其他建议!

关于asp.net-mvc - 用于将错误添加到模型状态 MVC 验证的自动映射器映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com