Я столкнулся с ситуацией, когда FindControl
возвращал элемент управления, который не был полным совпадением идентификатора, который я искал. В родительском контроле есть два элемента управления с похожими идентификаторами типа «MyControl» и «MyControlAlternate». Когда я вызываю FindControl
(«MyControl»), возвращается элемент управления «MyControlAlternate». Мне было интересно, есть ли у кого-нибудь объяснения, почему или мысли о том, что может вызвать эту проблему. То, как я это обошлось, это реализовать мою собственную версию FindControl
.FindControl возвращает неправильный контроль?
ответ
По умолчанию метод FindControl по умолчанию использует собственный контейнер имен. Если это не работает, он пытается выполнить сопоставление образцов по имени. Это объясняет, почему вы получаете неправильный контроль - ваш контейнер именования неверен, и код превращает его в фазу соответствия шаблонов.
Вот dissassembly из FindControl от рефлектора:
Public Overridable Function FindControl(ByVal id As String) As Control
Return Me.FindControl(id, 0)
End Function
Protected Overridable Function FindControl(ByVal id As String, ByVal pathOffset As Integer) As Control
Dim str As String
Me.EnsureChildControls
If Not Me.flags.Item(&H80) Then
Dim namingContainer As Control = Me.NamingContainer
If (Not namingContainer Is Nothing) Then
Return namingContainer.FindControl(id, pathOffset)
End If
Return Nothing
End If
If (Me.HasControls AndAlso (Me._occasionalFields.NamedControls Is Nothing)) Then
Me.EnsureNamedControlsTable
End If
If ((Me._occasionalFields Is Nothing) OrElse (Me._occasionalFields.NamedControls Is Nothing)) Then
Return Nothing
End If
Dim anyOf As Char() = New Char() { "$"c, ":"c }
Dim num As Integer = id.IndexOfAny(anyOf, pathOffset)
If (num = -1) Then
str = id.Substring(pathOffset)
Return TryCast(Me._occasionalFields.NamedControls.Item(str),Control)
End If
str = id.Substring(pathOffset, (num - pathOffset))
Dim control2 As Control = TryCast(Me._occasionalFields.NamedControls.Item(str),Control)
If (control2 Is Nothing) Then
Return Nothing
End If
Return control2.FindControl(id, (num + 1))
End Function
Очевидно, что происходит в вашем примере, что вы не указываете правильный контейнер именования. Однако, не предоставляя пример кода, я не могу быть более конкретным, чем это.
Основываясь на том, что вы говорите, является правдоподобной причиной, которая будет иметь общий смысл. Спасибо за отличный ответ – Achilles
- 1. FindControl() не находит контроль
- 2. ASP.net FindControl возвращает нуль
- 3. Неправильный контроль проекта - CVS
- 4. FindControl возвращает NULL в GridView
- 5. FindControl возвращает Null текстового объекта
- 6. WebAii HtmlControl.Click() нажимает неправильный контроль
- 7. Gridview row.Cells [i]. Контроль поиска Findcontrol в неправильной ячейке
- 8. FindControl всегда возвращает нуль динамически сгенерированной таблицы
- 9. FindControl возвращает null в OnRowCommand Событие
- 10. DetailsView FindControl() возвращает null после некоторых postbacks
- 11. FindControl возвращает пустое текстовое поле объекта/нуль
- 12. FindControl не находит динамически добавленный пользовательский контроль в управлении мастером
- 13. не может получить контроль над использованием FindControl в GridView
- 14. Легкий способ использовать FindControl («»)
- 15. VB.net FindControl Не рабочая
- 16. Date.getUTCDay возвращает неправильный день
- 17. HttpServletRequest.getRemoteAddr() возвращает неправильный адрес
- 18. JSpinner возвращает неправильный тип
- 19. gmtime возвращает неправильный час
- 20. datetime.parseexact возвращает неправильный месяц
- 21. String.Split возвращает неправильный массив
- 22. IViewLocalizer возвращает неправильный язык
- 23. Console.log возвращает неправильный ответ
- 24. CouchDB возвращает «неправильный» total_rows
- 25. CustomTableItemProvider.GetItem() Возвращает неправильный элемент
- 26. Запрос возвращает неправильный результат
- 27. insertNewObjectForEntityForName возвращает неправильный тип
- 28. Grep возвращает неправильный результат
- 29. JQuery возвращает неправильный HTML
- 30. pygeocoder возвращает неправильный геокод
Некоторые примеры кода могут помочь вам получить ответ. Поскольку с функцией FindControl существует определенное требование, в нем только возвращается динамически созданный элемент управления. Кроме того, они указывают, что вам, возможно, придется искать контейнер именования, чтобы получить необходимый вам элемент управления. – Josaph
FindControl найдет все элементы управления - это не ограничивается динамически создаваемыми элементами управления. Однако я согласен с тем, что требуется пример нерабочего кода. –