VB.NET UserControl для ASP.NET: «неизвестный элемент» - PullRequest
0 голосов
/ 25 марта 2011

Я создал UserControl в VB.NET и добавил его в форму.Но похоже, что я сделал это неправильно, поскольку это подчеркивается сообщением:

ctlDropDown не является известным элементом.Это может произойти, если на веб-сайте произошла ошибка компиляции или отсутствует файл web.config.

Когда я пытаюсь запустить его, я получаю следующую ошибку:

myControl здесь не разрешено, поскольку он не расширяет класс System.Web.UI.UserControl.

Вот код:

сам контроль...

   <%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ctlDropDown.ascx.vb" Inherits="myProj.UserControls.ctlDropDown" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
  <asp:textbox id="txtValue" style="Z-INDEX: 101; LEFT: -100px; POSITION: absolute; TOP: -200px"
        tabIndex="0" runat="server"></asp:textbox><asp:panel id="pnlMain" style="scrolling: no" Width="100%" runat="server" HorizontalAlign="Right"
        BorderWidth="1px" BorderStyle="Solid">
        <TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
            <TR>
                <TD vAlign="top" width="100%">
                    <asp:TextBox id="txtData" tabIndex="9500" runat="server" Width="100%" Height="100%" BorderStyle="None"
                        BorderWidth="0px"></asp:TextBox></TD>
                <TD vAlign="top">
                    <asp:ImageButton id="imgDownButton" runat="server" BackColor="ControlLight" BorderStyle="Outset"
                        BorderWidth="2px" ImageUrl="../Arrow.gif"></asp:ImageButton></TD>
            </TR>
        </TABLE>
    </asp:panel><asp:listbox id="lstList" tabIndex="0" Height="205px" Width="100%" runat="server" Visible="False"></asp:listbox><asp:textbox id="txtActiveElementClientID" style="Z-INDEX: 100; LEFT: -100px; POSITION: absolute; TOP: -200px"
        tabIndex="0" runat="server"></asp:textbox>

в форме ...

<%@ Register TagPrefix="uc1" TagName="ctlDropdown" Src="../UserControls/ctlDropDown.ascx" %>

и ...

<table>
<tr>
<TD style="POSITION: absolute;">
     <uc1:ctlDropDown ID="ctlDropDown1" runat="server"></uc1:ctlDropDown>
</TD>
</tr>
</table>

Ответы [ 4 ]

2 голосов
/ 25 марта 2011

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

CodeBehind="ctlDropDown.ascx.vb"

Этот файл должен содержать класс, на который ссылается ваша разметка:

Inherits="myProj.UserControls.ctlDropDown"

Этот класс должен расширять (наследовать) от класса System.Web.UI.UserControl,Примерно так:

Namespace myProj.UserControls
  Public Class ctlDropDown Inherits System.Web.UI.UserControl

    ' Your class implementation.  Likely a Page_Load method perhaps.

  End Class
End Namespace

(Обратите внимание, что класс может быть помечен как "частичный" класс, в зависимости от того, как был создан пользовательский элемент управления.)

Это необходимо для компилятора moreтак, чем разметка.Фактические элементы управления, пользовательские элементы управления и т. Д. В веб-приложении ASP .NET сводятся к классам, взаимодействующим друг с другом.Без класса, поддерживающего разметку, он не известен среде выполнения и не может быть использован.

0 голосов
/ 12 ноября 2013

Просто чтобы добавить объяснение решения.Решение не удалось загрузить элемент управления, потому что элемент управления был в ошибке.Поэтому, когда вы перетаскиваете элемент управления на форму, он никогда не регистрируется полностью во время разработки.

Всегда проверяйте, что элемент управления не имеет какой-либо исключенной или скрытой ошибки.

0 голосов
/ 25 марта 2011

Поскольку вы используете код для пользовательского элемента управления, элемент управления должен наследоваться от UserControl, см. Пример здесь .

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class SimpleControl
   Inherits UserControl
   Public name As TextBox
   Public output As Label
   Public myButton As Button


   Public Sub myButton_Click(sender As Object, e As EventArgs)

      output.Text = "Hello, " + name.Text + "."

   End Sub  

End Class
0 голосов
/ 25 марта 2011

Я нашел корень проблемы. Пользовательский контроль был неправильно указан в динамически созданном файле designer.vb. Поэтому я изменил это с ...

Protected WithEvents ctlDropDown1 As Global.myProj.UserControls.ctlDropDown

до ...

Protected WithEvents ctlDropDown1 As Global.myProj.ctlDropDown

... и теперь это работает.

Надеюсь, это кому-нибудь пригодится.

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