加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 永远不会调用IMetadataAware.OnMetadataCreated

发布时间:2020-12-17 00:25:34 所属栏目:大数据 来源:网络整理
导读:我创建了属性类来将元数据附加到属性,因此我可以显示表单输入字段的工具提示. HelpAttribute实现IMetadataAware: Public Class HelpAttribute Inherits Attribute Implements System.Web.Mvc.IMetadataAware Public Sub New(text As String) _text = text E
我创建了属性类来将元数据附加到属性,因此我可以显示表单输入字段的工具提示.

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>",metaData.DisplayName))
End Function

所以我可以为我的任何模型属性调用Html.HelpFor,如果它有适当的元数据,我会显示一个帮助图标,显示click(js)上的工具提示.

只要HelpAttribute在与我用其装饰属性的类相同的程序集中定义,这一切都可以正常工作.今天我不得不将HelpAttribute移动到一个单独的dll(不同的命名空间),所以我这样做了,我引用了该项目并期望它能够工作.我没有得到任何编译器错误,该应用程序工作正常,但它不显示帮助图标.我调试了代码,我看到HelpAttribute的构造函数被调用了具有正确文本的不同属性,但是从不调用OnMetadataCreated.有谁知道为什么会这样,以及如何解决它?

可能无法调用的另一个原因是,如果引用了错误的命名空间.所以
using System.Web.ModelBinding;

将编译而不是被击中,但你应该使用

using System.Web.Mvc;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读