कहा जाता है मैंने गुणों को मेटाडेटा संलग्न करने के लिए विशेषता वर्ग बनाया है, इसलिए मैं फ़ॉर्म के इनपुट फ़ील्ड के लिए टूलटिप्स प्रदर्शित कर सकता हूं।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
कॉल कर सकते हैं और मैं प्रदर्शित करता है, तो यह उचित मेटाडाटा है एक सहायता आइकन जो क्लिक (जेएस) पर टूलटिप दिखाता है।
यह सब ठीक काम करता है जब तक HelpAttribute
उसी वर्ग में परिभाषित किया जाता है, जिसे मैं अपनी संपत्तियों को सजाने के साथ करता हूं। आज मुझे HelpAttribute
को एक अलग डीएल (अलग-अलग नेमस्पेस) में स्थानांतरित करना पड़ा, इसलिए मैंने ऐसा किया, मैंने परियोजना का संदर्भ दिया और इसे काम करने की उम्मीद की। मुझे कोई कंपाइलर त्रुटियां नहीं मिलती हैं, ऐप ठीक काम करता है, लेकिन यह सहायता आइकन प्रदर्शित नहीं करता है। मैंने कोड डीबग किया और मुझे लगता है कि HelpAttribute
के कन्स्ट्रक्टर को उचित टेक्स्ट के साथ अलग-अलग गुणों के लिए बुलाया जाता है, लेकिन OnMetadataCreated
कभी नहीं कहा जाता है। क्या किसी के पास कोई विचार है कि यह क्यों है और इसे कैसे ठीक किया जाए?
का उपयोग करना चाहिए कोड यहां पोस्ट प्रश्न पूछा से संबंधित नहीं है, यह संदर्भ के लिए कोई विचार के साथ सिर्फ एक बॉयलरप्लेट विशेषता है ओपी की समस्या का। यहां तक कि अगर कोड कुछ उपयोग के लिए किया गया था - यह केवल कुछ भी स्पष्टीकरण के बिना अनावश्यक रूप से डंप किया जाना चाहिए और यह मूल प्रश्न का उत्तर कैसे देता है। – RobD