3

在我的应用程序中,我有许多属性,例如

    [DisplayFormat(ApplyFormatInEditMode=false,ConvertEmptyStringToNull=false,DataFormatString="{0:0.00}")]
public decimal somedecimalvalue { get; set; }

有没有什么方法可以概括这一点,只要在上面创建了一个十进制属性,格式就适用于它

4

3 回答 3

1

您可以通过创建自定义为模型中的小数属性手动分配元数据DataAnnotationsModelMetadataProvider

public class DecimalMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);

        if (propertyName == null)
            return metadata;

        if (metadata.ModelType == typeof(decimal))
        {
            // Given DisplayFormat Attribute:

            // if ApplyFormatInEditMode = true 
            // metadata.EditFormatString = "{0:0.00}";

            // for DataFormatString
            metadata.DisplayFormatString = "{0:0.00}";

            // for ConvertEmptyStringToNull
            metadata.ConvertEmptyStringToNull = false;
        }

        return metadata;
    }
}

然后在Global.asax.cs中注册这个提供者的Application_Start()方法:

ModelMetadataProviders.Current = new DecimalMetadataProvider();

然后你可以DisplayFormat从十进制属性中删除属性。请注意,这不会影响其他属性,您可以安全地在十进制属性上添加其他数据注释。

阅读有关MetaData类及其属性的更多信息。

快乐编码!:)

于 2012-05-29T10:58:08.063 回答
0

您必须使用Model Templates签出。

如果要自定义小数点在整个应用程序中的显示方式,则必须创建一个名为decimal.cshtml(如果是 Razor)的局部视图并将其存储在Views/Shared/DisplayTemplates文件夹中。

在 decimal.cshtml 中,您可以控制模型小数的显示方式。

像这样,要自定义显示以进行编辑的方式,您必须创建另一个具有相同名称的视图并将其转储到Views/Shared/EditorTemplates文件夹中。

MVC 框架负责其余的事情。

前任。

视图/共享/DisplayTemplates/decimal.cshtml

@model decimal
<p>
  @Model.ToString("0.00")
</p>
于 2012-05-29T10:59:49.670 回答
0

无法准确理解您想知道的内容。再描述一些

我认为没有直接的功能可以做到这一点。拥有一个接口并为所有实体实现相同的接口怎么样?

于 2012-05-29T06:19:39.393 回答