首页 > 解决方案 > 在显示属性中使用 appsettings 键

问题描述

我有一些硬编码的值,我想更改它以从 web.config 读取值。

[Display(Name = "SomeValue")]

我试过了

 [Display(Name = ConfigurationManager.AppSettings["SomeValue"].ToString())]

属性参数必须是常量表达式,...

标签: c#.netasp.net-mvc

解决方案


正确执行此操作,您将创建一个新属性来代替DisplayAttribute,以及一个ModelMetadataProvider正确读取该属性和其他显示属性的新属性。

简单来说,您创建一个HtmlHelper读取属性的新扩展,然后访问 Web.config 以找到该 AppSettings 键并返回值。

模型

public class SomeClass
{
    [Display(Name ="IdColText")]
    public int Id { get; set; }
}

扩大

using System;
using System.Configuration;
using System.Linq.Expressions;
using System.Web.Mvc;

namespace ProjectName
{
    public static class DisplayConfigNameExtension
    {
        public static MvcHtmlString DisplayConfigNameFor<TModel, TResult>(this HtmlHelper<TModel> html, Expression<Func<TModel, TResult>> expression)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, new ViewDataDictionary<TModel>());
            string configName = metadata.DisplayName;
            return MvcHtmlString.Create(ConfigurationManager.AppSettings[configName]);
        }
    }
}

看法

@model SomeClass

// The following is required for the HtmlHelper extension
@using ProjectName;

@Html.DisplayConfigNameFor(m => m.Id)

如果使用DisplayNameAttribute而不是,这也将起作用DisplayAttribute,并且也应该适用于带有 的类MetadataTypeAttribute


推荐阅读