Search code examples
asp.netvb.netuser-controlsascx

Custom control becomes generic "UserControl" and not its actual type in Designer class


I have a custom control in ASP.NET (VB.NET in code behind), defined with an ASCX:

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MyControl.ascx.vb" Inherits="Mynamespace.Controls.MyControl" %>

<!-- some html and other custom controls-->

And in code behind:

Namespace Controls

    Public Class MyControl
        Inherits System.Web.UI.UserControl

This is set in a library. A different project uses that control in a page:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="mypage.aspx.vb" 
    Inherits="myproject.mypage" culture="auto" meta:resourcekey="Page" uiculture="auto" 
    Transaction="RequiresNew" MasterPageFile="Mynamespace.Master" 
    Theme="ThemeBase2" StylesheetTheme="ThemeBase2" %>

<%@ Register tagprefix="Controls" tagname="MyControl" src="../Controls/MyControl.ascx" %>

<%-- some asp.net --%>

<Controls:MyControl ID="mycontrol1" runat="server" 
                    MyCustomProperty="value" />

However, when I build, I get an error saying

'MyCustomProperty' is not a member of 'System.Web.UI.UserControl'.

And in the designer.vb page I see:

Protected WithEvents mycontrol1 As Global.System.Web.UI.UserControl

How do I ensure it becomes:

Protected WithEvents mycontrol1 As Global.Mynamespace.Controls.MyControl

?


Solution

  • Your ascx file is not accessible because it is in a library

    You need to save the ascx file as an embedded resource of your library and load it as extern resource in your web application.

    You can consult this link for more informations.

    If you want share yours controls, i advise to create UserControl instead of CustomControl. Unfortunately, there is more work because the designer is not usable