[英]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.