簡體   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