नहीं, कोई प्रत्यक्ष समकक्ष नहीं है, लेकिन यदि आप फ्रेमवर्क के v3.5 का उपयोग कर रहे हैं, तो आप इस कार्यक्षमता को विस्तार विधि का उपयोग करके आसानी से जोड़ सकते हैं। उदाहरण के लिए:
Imports System.Runtime.CompilerServices
Public Module Extensions
<Extension()> _
Public Sub SetTag(ByVal ctl As Control, ByVal tagValue As String)
If SessionTagDictionary.ContainsKey(TagName(ctl)) Then
SessionTagDictionary(TagName(ctl)) = tagValue
Else
SessionTagDictionary.Add(TagName(ctl), tagValue)
End If
End Sub
<Extension()> _
Public Function GetTag(ByVal ctl As Control) As String
If SessionTagDictionary.ContainsKey(TagName(ctl)) Then
Return SessionTagDictionary(TagName(ctl))
Else
Return String.Empty
End If
End Function
Private Function TagName(ByVal ctl As Control) As String
Return ctl.Page.ClientID & "." & ctl.ClientID
End Function
Private Function SessionTagDictionary() As Dictionary(Of String, String)
If HttpContext.Current.Session("TagDictionary") Is Nothing Then
SessionTagDictionary = New Dictionary(Of String, String)
HttpContext.Current.Session("TagDictionary") = SessionTagDictionary
Else
SessionTagDictionary = DirectCast(HttpContext.Current.Session("TagDictionary"), _
Dictionary(Of String, String))
End If
End Function
End Module
फिर, अपने एएसपी.नेट पृष्ठों में, पहले अपने एक्सटेंशन को दायरे में लाएं, ई।छ:
Imports WebApplication1.Extensions
... और फिर वांछित के रूप में यह अपने नियंत्रण का उपयोग:
TextBox1.SetTag("Test")
Label1.Text = TextBox1.GetTag
बाद में संपादित: और तुम सच में, सच नहीं सत्र वस्तु में अपने टैग स्टोर करने के लिए चाहते हैं, इसके बजाय उन्हें अपने व्यूस्टेट में भरना संभव है। निश्चित रूप से यह इच्छा मतलब है कि आपके टैग उपयोगकर्ता के लिए भेजा पृष्ठ मार्कअप में उजागर किया जाएगा (सुलझा रूप में यद्यपि), और, दुर्भाग्य से, कि कुछ प्रतिबिंब फू की आवश्यकता है, के बाद से एक पृष्ठ का ViewState संपत्ति के रूप में चिह्नित किया गया है किसी कारण से 'संरक्षित'।
तो, यह कोड काफी मनोरंजन प्रयोजनों के लिए ही है, विचार किया जाना चाहिए जब तक आप वास्तव में की तरह कोड समीक्षा के दौरान भौहें बढ़ाने के लिए:
<Extension()> _
Public Sub SetTag(ByVal ctl As Control, ByVal tagValue As String)
ViewState.Add(ctl.ID & "_Tag", tagValue)
End Sub
<Extension()> _
Public Function GetTag(ByVal ctl As Control) As String
Return ViewState(ctl.ID & "_Tag")
End Function
Private Function ViewState() As Web.UI.StateBag
Return HttpContext.Current.Handler.GetType.InvokeMember("ViewState", _
Reflection.BindingFlags.GetProperty + _
Reflection.BindingFlags.Instance + _
Reflection.BindingFlags.NonPublic, _
Nothing, HttpContext.Current.CurrentHandler, Nothing)
End Function
अंतिम संपादन (मैं वादा करता हूँ ...)। और यहां प्रतिबिंब से छुटकारा पाने का एक तरीका है: सबसे पहले, एक उपयोग योग्य संपत्ति स्तर के साथ व्यूस्टेट संपत्ति का पर्दाफाश करने के लिए एक नई कक्षा बनाएं, फिर Web.UI के बजाय अपना कोड-बेहिंड (.aspx.vb) कक्षाएं प्रबंधित करें। पृष्ठ, जैसे:
Public Class PageEx
Inherits System.Web.UI.Page
Friend ReadOnly Property ViewStateEx() As Web.UI.StateBag
Get
Return MyBase.ViewState
End Get
End Property
End Class
अब, अपने एक्सटेंशन मॉड्यूल में आप इस संपत्ति नव परिभाषित के रूप में उपयोग कर सकते हैं:
Private Function ViewState() As Web.UI.StateBag
Return DirectCast(HttpContext.Current.Handler, PageEx).ViewStateEx
End Function
फिर भी एक हैक का एक सा है, लेकिन प्रतिबिंब का उपयोग कर अधिक से अधिक स्वीकार्य .. ।
वाह। यह जो कुछ मैं पूछ रहा था उसके करीब है और यह मानने का कोई तरीका नहीं है। मैं सत्र की बात के बारे में बहुत खुश नहीं हूं, लेकिन मुझे निश्चित रूप से इस एक्सटेंशन चीज को सीखना होगा (मैं v2.0 का उपयोग कर रहा हूं, लेकिन अब मैं माइग्रेट करूंगा :- डी) –
यह वास्तव में बहुत चालाक है! –
अच्छा! मैं आपको इसके लिए और अधिक अंक देना पसंद करूंगा! उम्मीद है कि वे किस कर्म के बारे में बात कर रहे हैं, उन्हें लागू कर देंगे ... –