这个问题标题的措辞可能很差,所以随意调整。
在我的MVC应用程序中,我有一个自定义属性,我用它来装饰电子邮件字段,然后传递或者使模型失败。
虽然我允许使用提交评论,但我通过ajax提交,因此不要进行完整的回发和模型验证。
所以我想验证地址但不复制代码。我还想避免将验证码中的代码分解为另一个类或者这是最好的方法吗?
还有其他方法吗?我可以在ajax回发中创建模型并在那里验证它,然后返回带有错误消息的局部视图吗?
还是有另一种方式吗?
答案 0 :(得分:0)
你说,......
所以我想验证地址但不复制代码。我还想避免将代码从验证器中分解到另一个类中,或者这是最好的方法吗?
IMO,这是最好的方式。将公共代码排除在外。我看到你的问题,我们的EmailValidator继承自RegularExpressionValidator,因此很难分解。我们有一个使用相同RegEx模式的RegEx实用程序类。我们在两个地方都用常量来指代模式...
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute() :
base(RegExUtility.SingleEmailAddressPattern)
{
ErrorMessage = "Please enter a valid email address";
}
和
public static class RegExUtility
{
public const SingleEmailAddressPattern = @"...";
public static bool IsValidSingleEmailAddress(string email)
{
return Regex.IsMatch(email, SingleEmailAddressPattern);
对于简单的Ajax回发操作,我认为您通常可以在控制器中处理它,或创建一个仅支持Ajax路径的单独POCO ViewModel。我知道有关于两种类型的操作使用相同模型的文章,但我们发现通常有足够的差异,值得拥有单独的视图模型。如果它们足够复杂,我们只需考虑公共代码。