Tôi đã tạo lớp thuộc tính để đính kèm siêu dữ liệu vào các thuộc tính, vì vậy tôi có thể hiển thị chú giải công cụ cho các trường nhập của biểu mẫu.IMetadataAware.OnMetadataCreated không bao giờ được gọi là
HelpAttribute
thực hiện 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
tôi sử dụng siêu dữ liệu này trong phương pháp khuyến nông của tôi:
<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
Vì vậy, tôi có thể gọi Html.HelpFor
cho bất kỳ tài sản mô hình của tôi và nếu nó có siêu dữ liệu thích hợp tôi hiển thị biểu tượng trợ giúp hiển thị chú giải công cụ khi nhấp (js).
Tất cả hoạt động tốt miễn là HelpAttribute
được định nghĩa trong cùng một cụm từ như các lớp tôi trang trí các thuộc tính của chúng. Hôm nay tôi đã phải di chuyển HelpAttribute
đến một dll riêng biệt (không gian tên khác nhau), vì vậy tôi đã làm điều đó, tôi tham chiếu dự án và dự kiến nó hoạt động. Tôi không nhận được bất kỳ lỗi trình biên dịch, ứng dụng hoạt động tốt, nhưng nó không hiển thị các biểu tượng trợ giúp. Tôi debuggedd mã và tôi thấy rằng các nhà xây dựng của HelpAttribute
được gọi là cho các thuộc tính khác nhau với một văn bản thích hợp, nhưng OnMetadataCreated
không bao giờ được gọi. Có ai có một ý tưởng tại sao đó là và làm thế nào để sửa chữa nó?
Mã đăng ở đây không liên quan đến câu hỏi hỏi, nó chỉ là một thuộc tính soạn sẵn không có xem xét cho bối cảnh của vấn đề của OP. Ngay cả khi mã đã được sử dụng một số - nó không nên chỉ được unceremoniously đổ mà không có một số giải thích về những gì nó làm và làm thế nào nó trả lời câu hỏi ban đầu. – RobD