EditorFor和StringLength数据注释

本文关键字:注释 数据 StringLength EditorFor | 更新日期: 2023-09-27 18:05:37

我在模型上有以下属性

        [Display(Name = "MyProperty")]
        [StringLength(10)]
        public string MyProperty
        {
            get;set;
        }

和以下EditorFor模板

<%@ Page Language="C#" MasterPageFile="Template.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Data" runat="server">
    <%= Html.TextBox("", Model)%>
</asp:Content>

我的问题是StringLength属性(可以理解)没有被设置为限制文本框的大小。我的答案是我应该如何获得属性设置在我的模板?

谢谢

EditorFor和StringLength数据注释

如果您正在使用ASP,则接受的答案不起作用。NET MVC 3或更高版本。您需要更改用于获取值的键:

IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers
    .GetValidators(ViewData.ModelMetadata, ViewContext);
ModelClientValidationRule rule = validators.SelectMany(v => 
    v.GetClientValidationRules()
).FirstOrDefault(m => m.ValidationType == "length");
if (rule != null && rule.ValidationParameters.ContainsKey("max")) {
    var maxLength = rule.ValidationParameters["max"];
}

元数据属性和验证属性是有区别的。StringLengthAttribute是一个验证属性,所以你不能从ModelMetadata中得到它。

幸运的是,Wayne Brantley做了艰苦的工作。下面是他获取验证规则的方法:

IEnumerable<ModelValidator> validators = ModelValidatorProviders.Providers.GetValidators(ViewData.ModelMetadata, ViewContext);
ModelClientValidationRule rule = validators.SelectMany(v => v.GetClientValidationRules()).FirstOrDefault(m => m.ValidationType == "stringLength");
if (rule != null && rule.ValidationParameters.ContainsKey("maximumLength"))
{
   var maxLength = rule.ValidationParameters["maximumLength"];
}

注意:如果你使用ASP。. NET MVC 3或更高版本,您需要将stringLength更改为length, maximumLength更改为max