IMetadataAware.OnMetadataCreated никогда не вызывается.

Я создал класс атрибутов для прикрепления метаданных к свойствам, поэтому я могу отображать всплывающие подсказки для полей ввода формы.

HelpAttributeреализует IMetadataAware:

Public Class HelpAttribute
    Inherits Attribute
    Implements System.Web.Mvc.IMetadataAware

    Public Sub New(text As String)
        _text = text
    End Sub

    Private _text As String
    Public ReadOnly Property Text As String
        Get
            Return _text
        End Get
    End Property

    Public Sub OnMetadataCreated(metadata As System.Web.Mvc.ModelMetadata) Implements System.Web.Mvc.IMetadataAware.OnMetadataCreated
        metadata.AdditionalValues.Add("HelpText", _text)
    End Sub
End Class

Я использую эти метаданные в своем методе расширения:

<Extension()>
Public Function HelpFor(Of TModel, TProperty)(ByVal htmlHelper As HtmlHelper(Of TModel), expression As Expression(Of Func(Of TModel, TProperty))) As MvcHtmlString
    Dim metaData = ModelMetadata.FromLambdaExpression(Of TModel, TProperty)(expression, htmlHelper.ViewData)

    If metaData.AdditionalValues.ContainsKey("HelpText") Then
        Dim helpText = metaData.AdditionalValues("HelpText")
        Return MvcHtmlString.Create(String.Format("<span class=""help""></span><div class=""tooltip"" style=""display: none""><div class=""border-top""></div><div class=""close""><a href=""#"">close</a></div><br class=""clear""><div class=""content"">{1}</div></div>", htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(metaData.PropertyName), helpText, metaData.DisplayName))
    End If

    Return MvcHtmlString.Create(String.Format("<span class=""no_help""></span>", htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(metaData.PropertyName), metaData.DisplayName))
End Function

Таким образом, я могу вызвать Html.HelpForдля любого свойства моей модели. и если у него есть соответствующие метаданные, я показываю значок справки, который показывает всплывающую подсказку при нажатии (js).

Все это работает нормально, пока HelpAttributeопределен в той же сборке, что и классы, которыми я украшаю их свойства. Сегодня мне пришлось переместить HelpAttributeв отдельную dll (также другое пространство имен), поэтому я сделал это, я сослался на проект и ожидал, что он будет работать. Я не получаю никаких ошибок компилятора, приложение работает нормально, но не отображает значки справки. Я отладил код и вижу, что конструктор HelpAttributeвызывается для разных свойств с правильным текстом, но OnMetadataCreatedникогда не вызывается. Есть ли у кого-нибудь идеи, почему это так и как это исправить?

6
задан Jens Björnhager 9 March 2012 в 15:26
поделиться