我正在使用客户端/服务器端验证构建C#,MVC4 .NET Web应用程序,方法是将自定义属性添加到我的模型属性中。
在这个项目中,有几种形式,用户可以输入电子邮件地址。因此,每个ViewModel都有string
属性EMailAddress,其中包含[CustomRequired][CustomEMail][CustomMinLength(13)][CustomMaxLength(200)]
等属性,以确保Mail有效并且可以写入只能存储例如200个字符。
无论用户以何种形式输入电子邮件,它都将始终存储在同一个数据库字段中。因此,创建一个cutom DataType EMailAddress
。
我最终得到了以下内容:
public struct EMailAddress
{
[CustomMinLength(13)]
[CustomMaxLength(200)]
[CustomEMail]
public string Address { get; set; }
private EMailAddress(string value)
{
Address = value;
}
public static implicit operator EMailAddress(string value)
{
return new EMailAddress(value);
}
public static implicit operator EMailAddress(EMailAddress value)
{
return new value.Address ;
}
}
在ViewModel中,我将创建一个此类型EMailAddress
的属性,用[CustomRequired]
装饰,因为在应用程序的每个部分都不需要电子邮件。
我想要的是一个结构/类,其行为类似于.NET DateTime
结构。我可以拥有DateTime
的属性,在视图中我可以做到:
@Html.TextBoxFor(m => m.DateTimeProperty)
将文本框的值绑定到基础DateTime对象。但这不适用于我的自定义结构,因为我需要编写类似
的内容@Html.TextBoxFor(m => m.EMailProperty.Address)
我真的不喜欢结构中的public string Address { get; set; }
。
当遇到DateTime对象时,.NET是否会做一些“魔术”或者这是如何实现的?我是完全走错路还是我只错过了一个特殊的部分?也许是一个类而不是结构?