【问题标题】:Get DataFormatString formatted value from server side从服务器端获取 DataFormatString 格式化值
【发布时间】:2015-04-08 10:45:12
【问题描述】:
class Report
{
    [Display(Name = "Market Value")]
    [DisplayFormat(DataFormatString = "£ {0:#,##0}", ConvertEmptyStringToNull = true)]
    public int? MarketValue { get; set; }
}

当然它在视图中有效,结果是“£10,000”

@Html.DisplayFor(model => report.MarketValue)

如何通过服务器端这样的方式检索格式化的值?

string formattedValue = report.MarketValue.ToFormattedString();

提前致谢!

【问题讨论】:

  • 我认为downvotes应该通过评论来完成。理想情况下,每个批评都应该是建设性的。

标签: c# model-view-controller data-annotations displayformat


【解决方案1】:

很粗糙,但它可以做到:

public static string GetAttributeFormatedString<TModel, TMember>(this TModel model, Expression<Func<TModel, TMember>> memberSelector)
{
    var selectorBody = memberSelector.Body;
    if (selectorBody.NodeType != ExpressionType.MemberAccess)
    {
        throw new ArgumentException("Nope dude, not this time", "memberSelector");
    }
    var attribute = ((MemberExpression) selectorBody).Member
        .GetCustomAttributes(typeof(DisplayFormatAttribute), true)
        .OfType<DisplayFormatAttribute>()
        .FirstOrDefault();
    if (attribute == null)
    {
        throw new InvalidOperationException("Attribute, dude");
    }
    var format = attribute.DataFormatString;
    var result = string.Format(format, memberSelector.Compile().Invoke(model));

    return result;
}

用法:

    var r = new Report
    {
        MarketValue = 10000
    };
    var formated = r.GetAttributeFormatedString(x => x.MarketValue);

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多