Свойство “Tag” Vb6, эквивалентное в ASP.NET?

Во-первых, посмотрите , как спросить

Исходя из этого, я бы начал в руководстве разработчика googles , вам нужно запросить ключ API. Затем попробуйте вставить этот код с помощью ключа API, вставленного в ваш html-код


, после чего, возможно, вы сможете немного углубиться в детали того, что означает «это не работает». Вы получаете какой-либо вывод в консоли, он выключил компьютер? любая дополнительная деталь поможет нам помочь вам!

7
задан Daniel Magliola 8 October 2008 в 14:46
поделиться

7 ответов

Нет, нет никакого прямого эквивалента, но если Вы используете 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

Затем на Ваших страницах ASP.NET сначала принесите свои расширения в объем, например:

Imports WebApplication1.Extensions

... и затем используйте его Ваши средства управления, как желаемый:

TextBox1.SetTag("Test")

Label1.Text = TextBox1.GetTag

БОЛЕЕ ПОЗДНЕЕ РЕДАКТИРОВАНИЕ: и если Вы действительно, действительно не хотите хранить свои теги в объекте Сессии, возможно наполнить их в Ваше Состояние отображения вместо этого. Это будет, конечно, означать, что Ваши теги будут выставлены в разметке страницы, отправленной пользователю (хотя в запутываемой форме), и, к сожалению, что некоторое отражение-fu требуется, так как свойство 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

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ (я обещаю...). И вот способ избавиться от отражения: во-первых, создайте новый класс, чтобы выставить свойство ViewState с применимым уровнем защиты, затем изменить Ваш Код - Позади (.aspx.vb) классов для наследования этого вместо сети. UI.Page, например:

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

Все еще определенный взлом, но намного более приемлемый, чем использование отражения...

4
ответ дан 7 December 2019 в 12:26
поделиться

Можно также использовать составной шаблон вместо того, чтобы использовать наследование:

public class TaggedControl<TControl, TTag> : Control 
 where TControl : Control, new()
 { public TaggedControl() {this.Control= new TControl();}

   public TControl Control {get; private set;}
   public TTag     Tag     {get; set;}     

   protected override void CreateChildControls(){Controls.Add(Control);}
 }

 var textBox = new TaggedControl<TextBox, string>();
 textBox.Tag = "Test";
 label.Text  = textBox.Tag;
3
ответ дан 7 December 2019 в 12:26
поделиться

Можно добавить атрибуты к некоторым средствам управления, но это, кажется, добавляет некоторый противный HTML вокруг представленного управления, чего-то как <div attrName="attrValue">... (это мог бы быть промежуток хотя),

0
ответ дан 7 December 2019 в 12:26
поделиться

Я не уверен, что свойство тегов сделало в VB6, но возможно Вы ищете Attributes свойство Веб-элементов управления:

MyImgCtrl.Attributes["myCustomTagAttribute"] = "myVal";
0
ответ дан 7 December 2019 в 12:26
поделиться

Вы спросили о ASP.NET, но vb6 был настольным языком и так был, он 'отмечен' средства управления. VBScript, используемый для классического asp, действительно не имел понятия управления.

Теперь в .NET, для настольных средств управления можно использовать наследование, которое намного более мощно, чем старое Свойство тегов так или иначе. Наследование относится к веб-элементам управления также, хотя действительно необходимо быть осторожны относительно использования его для содержания состояния.

0
ответ дан 7 December 2019 в 12:26
поделиться

Tag свойство всегда было странной подобной бородавке вещью, которая была полезна как что-то прочь, которого Вы могли подвесить любые данные, которые Вы хотели. Но это не было со строгим контролем типов, и это действительно не сделало для когерентного дизайна. Само свойство, просто подвешенное от управления как странная кнопка. Они сохранили его в WinForms для упрощения кода портирования от VB6. Новый WPF Control класс не имеет a Tag.

С.NET у Вас есть полная объектная ориентация и соответствующий полиморфизм типа, таким образом, можно сильно-ввести любую дополнительную информацию, Вы хотите связаться с кодом, является ли это в подклассе или a Dictionary<Control,TValue>.

Если это находится на сингле Page запрос и Вы хотите общее решение Словарь на самой Странице для каждого типа значения (например, Dictionary<Control,string> и Dictionary<Control,BusinessObject>) должен быть точно, в чем Вы нуждаетесь.

-1
ответ дан 7 December 2019 в 12:26
поделиться

Можно использовать средства управления asp:Hidden, чтобы хранить данные между сообщениями. Как будет говорить, нет никакого смысла иметь свойство тегов, если Вы проигрываете, это - значение.

-1
ответ дан 7 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: