我的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属性(可以理解)没有被设置为限制文本框大小。我的答案是,我应该如何获取要在模板中设置的属性?
谢谢
发布于 2011-08-16 18:55:45
元数据属性和验证属性之间存在差异。StringLengthAttribute是一个验证属性,所以您不能从ModelMetadata获取它。
幸运的是Wayne Brantley has done the hard work。下面是他获取验证规则的方法:
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 MVC3或更高版本,则需要将stringLength更改为length,将maximumLength更改为max。
发布于 2011-09-16 00:09:00
如果您使用的是ASP.NET MVC3或更高版本,则接受的答案不起作用。您需要更改用于获取该值的密钥:
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"];
}https://stackoverflow.com/questions/7076953
复制相似问题