0

是否可以在视图模型中的单个属性上使用 2 个远程验证属性?

我想做的是执行 2 次检查,首先是数据库中存在给定的用户 ID,其次是用户尚未在系统上设置帐户。

我想我总是可以制作一个包含两个测试的自定义属性,但如果可能的话,我宁愿只使用开箱即用的功能并将验证链接在一起。

我不能真正将逻辑组合成一个 JsonResult,因为我需要根据验证失败的方式有不同的错误消息,并且 AFAIK 不可能返回带有验证结果的错误消息?

4

2 回答 2

1

实际上,您可以使用 MVC3 远程验证返回一个独特的错误消息。例如,请参阅http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspxhttp://deanhume.com/Home/BlogPost/mvc-3-and-远程验证/51

于 2011-08-19T19:12:21.213 回答
1

我不确定您对“开箱即用的功能”有何期望,但您可以创建两个足够简单的属性。在 MVC 3 中,您也有机会从中派生模型IValidatableObject并实现该Validate方法。如果您发现需要,后者使您能够在彼此的上下文中对多个属性执行多个验证。

下面介绍如何实现 ValidationAttribute 并装饰您的属性。您将需要其中两个,因此我将其命名为一个UsernameExistsAttribute,我们假设您创建了另一个称为AccountAlreadySetupAttribute覆盖相同方法的IdValid方法。

public class UsernameExistsAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if((string)value == "Bob")
            return false;
        else
            return true;
    }
}

在您的视图模型中,您可以像这样装饰属性:

public class FreakinSweetViewModel
{
    [UsernameExists(ErrorMessage="Username exists")]
    [AccountAlreadySetup(ErrorMessage="Account is not setup")]
    public string Username { get; set; }
}

这将在 MVC 3 框中连接您的客户端和服务器端验证。

于 2011-08-19T17:44:41.043 回答