gpt4 book ai didi

asp.net-mvc - AutoMapper 中是否有办法指定所有被映射的字符串都将被修剪

转载 作者:行者123 更新时间:2023-12-03 10:52:32 25 4
gpt4 key购买 nike

我正在将 WinForms 应用程序转换为 ASP.NET MVC4,并尝试使用 AutoMapper 实现 ViewModel 方法,以在域实体和 ViewModel 之间进行映射,主要是将更复杂的对象图展平为 ViewModel,以便在 View 中轻松绑定(bind)。

我遇到的问题是,当将某些字段留空时,域模型想要应用 Trim()一个 NullReferenceException被抛出。

最初这一切都是在域对象中处理的,例如在 Customer 对象中,我有一个字符串属性,可以修剪以确保修剪传入的任何值,这样就不必在任何可以设置值的地方用 Trim 弄乱原始 WinForms ,只需将其传递给域模型并让它设置执行 Trim 或 ToUpper 作为值被持久化。

public virtual String Name
{
get { return _name; }
set { _name = StringFormatting.ToTitleCase(value.Trim()); }
}

public virtual String Email
{
get { return _email; }
set { _email = value.Trim(); }
}

就我的 ViewModel 而言,我刚刚获得了自动实现的属性:
public class CustomerCreateViewModel
{
[Required(ErrorMessage="Please enter a name for this customer")]
public string Name { get; set; }

[DataType(DataType.EmailAddress)]
public string Email { get; set; }
}

但是,如果在提交表单时电子邮件文本框为空,则 NullReferenceException会被扔到

set { _email = value.Trim() ; }



为了解决这个问题,我添加了一个 setter 保护子句
public virtual String Email
{
get { return _email; }
set
{
if (_email == value) return;
_email = value.Trim();
}
}

并且该字段的错误消失了,但它移动到了下一个属性,Mobile - 我重复了修复,然后到下一个,下一个和下一个。这些都不是必需的,因此将它们传入空是正确的。

AutoMapper 中是否有办法指定要修剪所有被映射的字符串?
我是不是错误地接近了这个?不需要修剪字符串吗?或者应该在哪里执行修剪,我的偏好是只需要在提交字符串时修剪它们,而不是在任何单个 Controller 的代码中,感觉应该在 ViewModel/Domain 模型的某个地方完成,但是在哪里?

最佳答案

作为替代和更简单的解决方案

Mapper.CreateMap<string, string>().ConvertUsing(
str => !string.IsNullOrEmpty(str) ? str.Trim() : null
);

关于asp.net-mvc - AutoMapper 中是否有办法指定所有被映射的字符串都将被修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581951/

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