有没有办法可以将非静态数据添加到dataannotation属性(标准属性或继承自标准数据注释(显示,范围等)或属性基类的自定义属性)?我希望能做到这样的事情:
public class ReportingDateTime
{
[Display(Name=this.FieldName)]
[Reporting.Core.CustomDisplay(this.FieldName)]
public DateTime Field { get; set; }
private string FieldName;
public ReportingDateTime(string fieldName)
{
this.FieldName = fieldName;
}
}
或者,有没有办法在类的构造函数中更改属性的元数据,如下所示:
public class ReportingDateTime
{
public DateTime Field { get; set; }
private string FieldName;
public ReportingDateTime(string fieldName)
{
Field.metadata.DisplayName = "Test Date";
}
}
从我所看到的,传递对象类型(自定义属性期望自定义对象的新实例)有一些成功但我主要看的是简单的数据类型(string,int,double)也许是通用集合(列表,字典等)
答案 0 :(得分:0)
据我所知,目前无法做到这一点。最终为我工作的是为该类提供自定义编辑器/显示模板,以便我可以将自己的字段用于显示属性,如下所示:
@inherits System.Web.Mvc.WebViewPage<Reporting.Fields.ReportingNumber>
<div class="editor-label">
@Model.FieldName
</div>
<div class="editor-field">
@if (Model.ReadOnly)
{
<div class="@Model.FieldSubType">
@Model.Field
</div>
}
else
{
@Html.TextBox("Field", Model.Field, new { @class = @Model.FieldSubType, @title = @Model.ToolTip })
@Html.ValidationMessageFor(model => model.Field)
}
对于验证,我建议使用FluentValidation的条件验证(http://fluentvalidation.codeplex.com/wikipage?title=Customising&referringTitle=Documentation&ANCHOR#WhenUnless),并使用类中的属性作为条件语句。
namespace Reporting.Validation
{
using FluentValidation;
using Reporting.Fields;
public class ReportingNumberValidation : AbstractValidator<ReportingNumber>
{
public ReportingNumberValidation()
{
RuleFor(m => m.Field).NotEmpty().WithMessage("*").When(m => m.Required);
RuleFor(m => m.Field).GreaterThanOrEqualTo(m => m.MinimumValue.Value).When(m => m.MinimumValue.HasValue);
RuleFor(m => m.Field).LessThanOrEqualTo(m => m.MaximumValue.Value).When(m => m.MaximumValue.HasValue);
}
}
}