数据注释属性在MVC应用程序中使用伙伴类元数据无效

时间:2010-10-07 14:13:20

标签: asp.net asp.net-mvc metadata

我发现提示MVC 2识别'buddy class'类型的属性元数据,其中数据注释属性应用于'buddy'元数据类,而实际实体类上的MetadataType指向该buddy类,如下面。但是,如下所示,似乎唯一对呈现的UI产生任何影响的属性是DisplayName。为什么DataTypeRequiredReadOnly等其他属性无效?即为什么我可以在只读字段中输入文本?当必填字段为空时,为什么我没有收到错误?为什么DataType属性没有明显效果?为什么EditorForModel不包含验证消息?

[MetadataType(typeof(CustomerMetadata))]
public partial class Customer
{
    public class CustomerMetadata
    {
        [ScaffoldColumn(false)]
        public object CustomerId { get; set; }

        [DisplayName("CustomerNo.")]
        [ReadOnly(true)]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Customer No. is required.")]
        public object CustomerNo { get; set; }
    }
}

无论我为每个模型属性使用显式LabelForTextBoxFor,还是为整个模型使用单个EditorForModel,我都会发现行为相同。

2 个答案:

答案 0 :(得分:2)

  1. Required仅影响验证。
  2. Readonly仅影响绑定。
  3. ErrorMessage字符串仅在您使用ValidationFor()方法时输出。

答案 1 :(得分:0)

因为我在视图中包含EnableClientValidation()调用,所以我希望这些属性能够导致客户端,Javascript验证以及验证消息的显示。

事实证明,仅仅包括EnableClientValidation()并不足够,并且还必须修改母版页(或者如果您不使用母版页,则查看),以包含以下脚本:

<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>

我不确定jQuery是否需要验证,但我按照建议将其包含在内,现在情况正常。