如何确认是否有输入?

时间:2011-09-13 16:43:22

标签: asp.net-mvc-3

使用Asp.Net MVC3,我在向导中有很多步骤,在每个步骤后我都会使用$ .post来捕获输入的内容。前两个步骤很简单,无论如何都需要所有字段。

其他步骤不是必需的。但是,如果步骤3有10个输入字段并输入10个中的5个值,则必须启用验证(仅适用于5个字段并仅显示这5个字段的错误)。所以在本质上,只有当有人为这5个字段输入任何内容时,[Required],[StringLength]和[RegEx]等内容才会启动。如果未输入任何内容,则应跳过验证。

我在考虑使用Required或Optional as命名或添加每个步骤(div)的前缀

希望有答案。

3 个答案:

答案 0 :(得分:1)

如果将向导上的每个步骤分成单独的表单,则可以在必要时在该步骤的表单上执行验证。

请注意,只有在该特定字段中输入信息时才会验证 BY DEFAULT StringLengthRegEx属性。如果字段为空,则不会对这些属性进行验证。

至于Required属性,我不清楚你在问什么。您是否说根据另一个领域的条件需要特定步骤中的字段?如果是这样,那么您必须实现有条件要求的验证器。

答案 1 :(得分:1)

您可以使您的viewmodel实现IValidatableObject。界面需要一个函数IEnumerable<ValidationResult> Validate(ValidationContext validationContext)。 MVC将首先从任何DataAnnotations验证模型,然后在模型的Validate函数上验证模型(两次,这并不总是你想要的)。

例如,

public class Input : IValidatableObject
{
    public string Name { get; set; }
    // ... Other fields ...

    public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var results = new List<ValidationResult>();

        if (String.IsNullOrEmpty(Name))
        {
            // ... Validation rules ...
            results.Add(new ValidationResult("Please enter a name.", new[] { "Name" }));
        }

        return results;
    }
}

来自Scott Guthrie's blog.

的更多信息

答案 2 :(得分:0)

您可以编写自定义验证属性并在IsValid方法中执行此验证逻辑,您可以在该方法中访问该值,并检查该值是否为空或空,然后才进行默认验证。