我有一个模型类,其属性如下:
[Display(Name = "Phone", Description="Hello World!")]
public string Phone1 { get; set; }在我的视图中显示标签和呈现用于输入的文本框非常简单:
@Html.LabelFor(model => model.Organization.Phone1)
@Html.EditorFor(model => model.Organization.Phone1)
@Html.ValidationMessageFor(model => model.Organization.Phone1)但是如何呈现Description注解属性的值呢?“你好,世界!”??
发布于 2011-07-05 14:45:28
我最终得到了一个这样的帮手:
using System;
using System.Linq.Expressions;
using System.Web.Mvc;
public static class MvcHtmlHelpers
{
public static MvcHtmlString DescriptionFor<TModel, TValue>(this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
var description = metadata.Description;
return MvcHtmlString.Create(string.Format(@"<span>{0}</span>", description));
}
}感谢那些把我引向正确方向的人。:)
发布于 2013-09-19 13:14:21
使用本文中关于如何Display visual hints for the fields in your form的技术,您可以通过以下方式访问该值:
@Html.TextBoxFor(
model => model.Email ,
new { title = ModelMetadata.FromLambdaExpression<RegisterModel , string>(
model => model.Email , ViewData ).Description } ) 发布于 2016-02-09 22:03:29
我正要使用accepted answer,但它不适用于ASP.NET Core1/2(也称为MVC6),因为ModelMetadata.FromLambdaExpression已不复存在,并已转移到ExpressionMetadataProvider (用法也略有改变)。
这是可与ASP.NET Core1.1和2一起使用的更新扩展方法
using System;
using System.Linq.Expressions;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
public static class HtmlExtensions
{
public static IHtmlContent DescriptionFor<TModel, TValue>(this IHtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
if (html == null) throw new ArgumentNullException(nameof(html));
if (expression == null) throw new ArgumentNullException(nameof(expression));
var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider);
if (modelExplorer == null) throw new InvalidOperationException($"Failed to get model explorer for {ExpressionHelper.GetExpressionText(expression)}");
return new HtmlString(modelExplorer.Metadata.Description);
}
}ASP.NET核心1
对于ASP.NET Core1,可以使用相同的代码,但需要不同的名称空间usings
using System;
using System.Linq.Expressions;
using Microsoft.AspNet.Html.Abstractions;
using Microsoft.AspNet.Mvc.ViewFeatures;使用
@Html.DescriptionFor(model => model.Phone1)https://stackoverflow.com/questions/6578495
复制相似问题