EditorFor и StringLength DataAnnotations - PullRequest
       3

EditorFor и StringLength DataAnnotations

4 голосов
/ 16 августа 2011

У меня есть следующее свойство в моей модели

        [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 (по понятным причинам) неустанавливается для ограничения размера текстового поля.Мой ответ: как мне получить атрибуты для установки в моем шаблоне?

Спасибо

Ответы [ 2 ]

10 голосов
/ 15 сентября 2011

Принятый ответ не работает, если вы используете 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"];
}
7 голосов
/ 16 августа 2011

Существует разница между атрибутами метаданных и атрибутами проверки.StringLengthAttribute является атрибутом проверки, поэтому вы не можете получить его от ModelMetadata.

К счастью, Уэйн Брантли проделал тяжелую работу .Вот как он получает правила проверки:

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.

...