我在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
答案 0 :(得分:2)
确保MyControl
内定义了Global.Mynamespace.Controls.MyControl
。它继承了这个命名空间,但似乎这应该是定义它的命名空间。此外,当然要确保定义了MyCustomProperty。
答案 1 :(得分:1)
您的ascx文件无法访问,因为它位于库中
您需要将ascx文件另存为库的嵌入式资源,并将其作为外部资源加载到Web应用程序中。
您可以参考此link了解更多信息。
如果你想分享你的控件,我建议创建UserControl而不是CustomControl。不幸的是,由于设计师不可用,还有更多的工作