我想向MVC视图公开一个全球化的帮助文本。
目前的代码如下,
自定义属性类
class HelpTextAttribute : Attribute
{
public string Text { get; set; }
}视图模型属性和自定义注释
[HelpText(Text = "This is the help text for member number")]
public string MemberNo { get; set; }(文字字符串必须来自资源类)
问题是如何编写一个Html扩展,它可以执行以下操作
@Html.HelpTextFor(m => m.MemberNo)发布于 2015-06-18 13:45:56
您需要用以下内容扩展HtmlHelper类:
public static MvcHtmlString HelpTextFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expr)
{
var memberExpr = expr.Body as MemberExpression;
if (memberExpr != null)
{
var helpAttr = memberExpr.Member.GetCustomAttributes(false).OfType<HelpTextAttribute>().SingleOrDefault();
if (helpAttr != null)
return new MvcHtmlString(@"<span class=""help"">" + helpAttr.Text + "</span>");
}
return MvcHtmlString.Empty;
}然后按要求使用:
@Html.HelpTextFor(m => m.MemberNo)另外,一定要用HelpTextAttribute修饰符标记您的public。
发布于 2015-06-18 13:41:15
也许你做错了事情,因为我认为DataAnnotations和MVC Helpers是不同的东西。
我会这样做:使用代码在我的App_Code上创建一个助手视图:
@helper HelpTextFor(string text) {
<span>@text</span>
}然后用上你写的。
发布于 2015-12-11 15:47:57
关于字符串的本地化(我不能评论,因为我还没有足够的点)
将下列属性添加到HelpTextAttribute中
public string ResourceName { get; set; }
public Type ResourceType { get; set; }然后按照以下方式调整HelpTextFor:
var helpAttr = memberExpr.Member.GetCustomAttributes(false).OfType<HelpTextAttribute>().SingleOrDefault();
Assembly resourceAssembly = helpAttr.ResourceType.Assembly;
string[] manifests = resourceAssembly.GetManifestResourceNames();
// remove .resources
for (int i = 0; i < manifests.Length; i++)
{
manifests[i] = manifests[i].Replace(".resources", string.Empty);
}
string manifest = manifests.Where(m => m.EndsWith(helpAttr.ResourceType.FullName)).First();
ResourceManager manager = new ResourceManager(manifest, resourceAssembly);
if (helpAttr != null)
return new MvcHtmlString(@"<span class=""help"">" + manager.GetString(helpAttr.ResourceName) + "</span>");请参阅以下关于为什么要删除.resources C# - Cannot getting a string from ResourceManager (from satellite assembly)的链接
向Dominic .NET软件开发人员问好
https://stackoverflow.com/questions/30916716
复制相似问题