繁体   English   中英

EditorFor 和 StringLength 数据注释

[英]EditorFor and StringLength DataAnnotations

我的 Model 上有以下属性

        [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 属性(可以理解)没有被设置为限制文本框的大小。 我的答案是我应该如何获取要在模板中设置的属性?

谢谢

如果您使用的是 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中获取它。

幸运的是,韦恩布兰特利已经完成了艰苦的工作 以下是他如何获得验证规则:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM