在我的视图中,我调用了Html.EditFor(),它触发了此数据类型的自定义编辑器模板。此外,我还传递了一些元数据(这是我不喜欢的部分):
<% ModelMetadata metaTitle = ModelMetadataProviders.Current.GetMetadataForProperty(null, Model.GetType(), "Title"); %>
<%: Html.EditorFor(x => Model.Title, new { metaData = metaTitle })%>传递的类型(属性标题)是'Translation‘类型。在自定义编辑器模板中,我必须从viewData读取传递的元数据才能使用它:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Translation>" %>
// {...}
if (ViewData["metaData"] != null)
metaData = (ModelMetadata)ViewData["metaData"];有没有什么方法可以在自定义编辑器-模板中直接访问元数据?不幸的是,如果我在editor-template中调用以下代码,我将不会得到相同的metadata-object (例如,如果Title-Property是必需的或不是必需的,则缺少该信息):
ModelMetadata metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Model.GetType());我希望避免在每次调用时都传递元数据对象...
谢谢你给任何小费!sl3dg3
发布于 2012-04-28 02:56:07
我认为您正在尝试获取EditorTemplate的实际属性的元数据。
您可以这样做(在EditorTemplate中):
var metadata = ModelMetadata.FromStringExpression("", ViewData);"“表示MVC的当前属性。
发布于 2011-02-23 17:55:15
您可以尝试执行以下操作来访问父元数据:
<%
var parentType = this.ViewData.ModelMetadata.ContainerType;
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType);
%>发布于 2012-12-15 03:00:07
无可否认,这有点晚了,但是有一种更简单的方法可以获取当前模型的模型元数据-它以property of ViewData的形式存在
var metadata = ViewData.ModelMetadata;https://stackoverflow.com/questions/5089086
复制相似问题