[英]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.