自定义控制变得通用" UserControl"而不是它在Designer类中的实际类型

时间:2015-12-14 22:25:51

标签: asp.net vb.net user-controls ascx

我在ASP.NET中有一个自定义控件(后面是代码中的VB.NET),用ASCX定义:

string digits = "0123456789abcdef";
string tohex(string number) {                        // Decimal to Hexadecimal function
    long length = number.length();
    string result = "";
    vector<long> nibbles;
    for ( long i = 0; i < length; i++ ) {
        nibbles.push_back(digits.find(number[i]));
    }
    long newlen = 0;
    do {
        long value = 0;
        newlen = 0;
        for ( long i = 0; i < length; i++ ) {
            value = (value * 10) + nibbles[i];
            if (value >= 16) {
                nibbles[newlen++] = value / 16;
                value %= 16;
            } else if (newlen > 0) {
                nibbles[newlen++] = 0;
            };
        };
        length = newlen;
        result = digits[value] + result;
    } while (newlen != 0);
    return result;
}

在代码背后:

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

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

这是在库中设置的。另一个项目在页面中使用该控件:

Namespace Controls

    Public Class MyControl
        Inherits System.Web.UI.UserControl

然而,当我构建时,我收到错误说

  

&#39; MyCustomProperty&#39;不是System.Web.UI.UserControl&#39;。

的成员

在designer.vb页面中,我看到:

<%@ 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" />

我如何确保它成为:

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

2 个答案:

答案 0 :(得分:2)

确保MyControl内定义了Global.Mynamespace.Controls.MyControl。它继承了这个命名空间,但似乎这应该是定义它的命名空间。此外,当然要确保定义了MyCustomProperty。

答案 1 :(得分:1)

您的ascx文件无法访问,因为它位于库中

您需要将ascx文件另存为库的嵌入式资源,并将其作为外部资源加载到Web应用程序中。

您可以参考此link了解更多信息。

如果你想分享你的控件,我建议创建UserControl而不是CustomControl。不幸的是,由于设计师不可用,还有更多的工作