[asp.net-mvc]ASP.NET MVC 2 β-默认模型联编程序

发布时间: 2017/3/25 3:56:42
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我从 ASP.NET MVC 1.0 切换到 ASP.NET MVC 2 β 后遇到一些不同的行为。我检查了重大更改,但尚不清楚问题所在。

问题是必须与默认的模型联编程序和实现 IDataErrorInfo 模型。

属性 (IDataErrorInfo.Item):

public string this[string columnName]

不再被调用的每个属性。我错过了什么?

解决方法 1:

一些进一步调试工作后,我想我明白为什么在我的特例 IDataErrorInfo.Item 不能被调用。下面的代码在 ASP.NET MVC 2 β 用于验证 IDataErrorInfo 属性︰

internal sealed class DataErrorInfoPropertyModelValidator : ModelValidator
{
    public DataErrorInfoPropertyModelValidator(ModelMetadata metadata, ControllerContext controllerContext)
        : base(metadata, controllerContext)
    {
    }

    public override IEnumerable<ModelValidationResult> Validate(object container)
    {
        if (Metadata.Model != null)
        {
            var castContainer = container as IDataErrorInfo;
            if (castContainer != null)
            {
                string errorMessage = castContainer[Metadata.PropertyName];
                if (!String.IsNullOrEmpty(errorMessage))
                {
                    return new[] { new ModelValidationResult { Message = errorMessage } };
                }
            }
        }
        return Enumerable.Empty<ModelValidationResult>();
    }
}

我的模型包含一个属性,是 System.Nullable<int> 和模型联编程序将一个空字符串绑定从 HTML 后,当 Metadata.Model 等于 null,因此并不运行验证。

这是从根本上不同于 ASP.NET MVC 1.0,在这种情况下触发所有验证程序的方法通过对调用 IDataErrorInfo.Item

我在用的东西的方式,它的目的只是不?

官方微信
官方QQ群
31647020