我发现提示MVC 2识别'buddy class'类型的属性元数据,其中数据注释属性应用于'buddy'元数据类,而实际实体类上的MetadataType指向该buddy类,如下面。但是,如下所示,似乎唯一对呈现的UI产生任何影响的属性是DisplayName
。为什么DataType
,Required
和ReadOnly
等其他属性无效?即为什么我可以在只读字段中输入文本?当必填字段为空时,为什么我没有收到错误?为什么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; }
}
}
无论我为每个模型属性使用显式LabelFor
和TextBoxFor
,还是为整个模型使用单个EditorForModel
,我都会发现行为相同。
答案 0 :(得分:2)
Required
仅影响验证。Readonly
仅影响绑定。 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是否需要验证,但我按照建议将其包含在内,现在情况正常。