繁体   English   中英

在 Display 属性中使用 appsettings 键

[英]Using appsettings key in Display attribute

我有一些硬编码值,我想将其更改为从 web.config 读取值。

[Display(Name = "SomeValue")]

我试过

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

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

正确执行此操作,您需要创建一个新属性来代替DisplayAttribute使用,并创建一个新的ModelMetadataProvider来正确读取该属性和其他显示属性。

为简单HtmlHelper ,您创建一个新的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类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM