运行时生成的字段上的asp.net mvc验证

时间:2013-09-27 20:01:22

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-validation

我正在创建一个表单,其中一些HTML字段在运行时根据数据库值生成,然后我想为它们添加验证。我现在的场景是这样的:

型号:

public class MeasureModel
{
    [Required]
    [DisplayName("Measure Name")]
    public int? MeasureName
    {
        get;
        set;
    }

    [DisplayName("Install Date")]
    [Required]
    [DataType(DataType.Date)]
    public DateTime? InstallDate
    {
        get;
        set;
    }

    public List<Datapoint> Datapoints { get; set; }
}

public class Datapoint
{
    public string DatapointTypeName { get; set; }

    public string DatapointTypeLabel { get; set; }

    public string Value { get; set; }

    public string ValidationRule { get; set; }

}

我的观点是这样的:

    @Html.TextBoxFor(m => m.JobCost)
        @Html.ValidationMessageFor(m => m.JobCost)
    @for (int i = 0; i < Model.Datapoints.Count; i++)
    {
        <div class="editor-label">
            @Model.Datapoints[i].DatapointTypeLabel
            @Html.HiddenFor(model => model.Datapoints[i].DatapointTypeName)
        </div>
        <div class="editor-field">
                @Html.TextBoxFor(model => model.Datapoints[i].Value)
        </div>
    }

我遍历数据点以生成每个数据点的文本框。这些数据点中的每一个都有不同的验证规则,例如RequiredTextRequiredDecimalRange(10, 100)等。为了实现验证,我尝试按照{{3}创建自定义ModelValidatorProvider }。

此处所述的验证对于普通模型字段非常有用,但在数据点的情况下,动态生成文本字段,这不起作用。

未获取验证的原因是modelMetadata未获得动态字段的正确选择,并且我没有在类GetValidators的方法XmlModelValidatorProvider中获取元数据propertyName,如链接中所述我提到。

我确信我想要实现的是一种常见的要求,MVC必须有更好的方法来实现这一目标,但我不确定我所尝试的是正确还是简单的愚蠢。

请在我当前的方法或其他适合此案例的方法中提出错误。

编辑:

添加一些关于我目前的验证提供程序类的信息:

    public class XmlModelValidatorProvider : ModelValidatorProvider
    {
    public readonly Dictionary<string, Type> _validatorTypes;

    ...
    public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
           {
            ....
    }

此课程的更多详细信息可以是here

0 个答案:

没有答案