我读过布拉德·威尔逊的一篇文章:
ASP.NET MVC 2模板,第2部分: ModelMetadata
http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html
让我们假设在我的ASP.NET MVC 3应用程序中,我有以下模型:
public class Contact {
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}以下是我的观点:
@model MyApp.Models.Contact
<h2>Contact</h2>
@Html.EditorForModel()我在Contact.cshtml路径中有一个~/Views/Shared/EditorTemplates/文件。
我的问题是如何才能接触到每个模型属性的ModelMetadata。例如,如下所示:
Contact.cshtml
@model MyApp.Models.Contact
<input type="text" placeholder="@Model.FirstName.GetItsMetaData().Watermark"
value="@Model.FirstName" />注意: GetItsMetaData方法是我完全编造出来的。我只是想去酒店的MedelMetadata。不一定是那样的。
编辑
我发现了另一个类似的问题:
ModelMetadata for complex type in editortemplate in asp.net mvc
答案是:
@{
var metadata = ModelMetadata
.FromLambdaExpression<TestThing, string>(x => x.Test2, ViewData);
var watermak = metadata.Watermark;
}但是,对我的模型中的每个属性都这样做是相当冗长的,不是吗?
发布于 2011-11-17 14:47:46
创建用于此目的的HtmlHelper比较简单。帮手应该是这样的:
public static string WatermarkFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
return metadata.Watermark;
}您可以在示例中使用它,如下所示:
@model MyApp.Models.Contact
<input type="text" placeholder="@Html.WatermarkFor(x => x.FirstName)"
value="@Model.FirstName" /> https://stackoverflow.com/questions/8168557
复制相似问题