ModelMetaData: как получить «родительские» метаданные? - PullRequest
3 голосов
/ 23 февраля 2011

На мой взгляд, я вызываю Html.EditFor (), который запускает пользовательский шаблон-редактор для этого типа данных.Кроме того, я передаю некоторые метаданные (и эта часть мне не нравится):

<% ModelMetadata metaTitle = ModelMetadataProviders.Current.GetMetadataForProperty(null, Model.GetType(), "Title"); %>
<%: Html.EditorFor(x => Model.Title, new { metaData = metaTitle })%>

Переданный тип (свойство Title) имеет тип «Перевод».В пользовательском шаблоне редактора я должен прочитать переданные метаданные из viewData, чтобы использовать их:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Translation>" %>
// {...}
if (ViewData["metaData"] != null)
    metaData = (ModelMetadata)ViewData["metaData"];

Есть ли какой-нибудь способ получить доступ к метаданным непосредственно в пользовательском шаблоне редактора?К сожалению, если я вызову следующее в редакторе-шаблоне, я не получу тот же объект метаданных (где, например, отсутствует информация, если свойство заголовка требуется или нет):

ModelMetadata metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Model.GetType());

Я хотел бы избежать передачи объекта метаданных при каждом вызове ...

Спасибо за любые подсказки!sl3dg3

Ответы [ 3 ]

7 голосов
/ 27 апреля 2012

Я думаю, вы пытаетесь получить метаданные для фактического свойства для EditorTemplate.

Вы можете сделать это следующим образом (внутри EditorTemplate):

var metadata = ModelMetadata.FromStringExpression("", ViewData);

""значит для MVC текущее свойство.

5 голосов
/ 23 февраля 2011

Вы можете попробовать следующее для доступа к родительским метаданным:

<%
    var parentType = this.ViewData.ModelMetadata.ContainerType;
    var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType);
%>
0 голосов
/ 14 декабря 2012

По общему признанию, немного опоздал на вечеринку, однако есть более простой способ получить метаданные модели для текущей модели - он существует как свойство ViewData :

var metadata = ViewData.ModelMetadata;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...