我正在尝试向我的asp.net应用程序添加一个新的自定义Web控件。
以下是我的自定义控件的代码
using System.Web.UI.WebControls;
namespace MyPersonalCareHealthRecord.classes.extended
{
public class TableHeaderDataCell : TableHeaderCell
{
public string MappedDataField { get; set; }
}
}
在我的标记中,我使用以下代码
<dt:TableHeaderDataCell CssClass="HeaderField" runat="server">Test1</dt:TableHeaderDataCell>
收到一些错误,做一些研究,然后阅读这篇文章 http://msdn.microsoft.com/en-US/library/1e9b4c9f(v=vs.80).aspx(以及引用我在asp.net上的一本书)我尝试添加一个像这样的寄存器指令并将我的标记调整到上面。
<%@ Register TagPrefix="dt" TagName="TableHeaderDataCell" namespace="MyPersonalCareHealthRecord.classes.extended" %>
然而,在尝试加载页面时,我收到一个错误:“该指令缺少'src'属性。” 我尝试将我的指令改为:
<%@ Register TagPrefix="dt" TagName="TableHeaderDataCell" src="~/Classes/TableHeaderDataCell.cs" %>
然后得到错误:“文件'src'在这里不是有效的,因为它没有公开类型。” 经过进一步研究并找到此stackoverflow文章How to use a Subclassed Control on an ASP.NET Page? 我尝试将我的register指令更改为
<%@ Register TagPrefix="dt" TagName="TableHeaderDataCell" namespace="MyPersonalCareHealthRecord" assembly="MyPersonalCareHealthRecord" %>
导致错误:“该指令缺少'src'属性。” 添加src属性给了我错误:“当'tagname'属性存在时,此指令不支持'namespace'属性。”
删除tagname属性会给我带来错误,同时删除命名空间标记名......
我意识到这是一个冗长的问题,但任何人都可以帮助我吗?我不知道我做错了什么。
答案 0 :(得分:1)
转到添加Webforms用户控件。
添加后,转到控件后面的代码(cs文件),然后将属性放在那里
public string MappedDataField { get; set; }
保存。
转到解决方案资源管理器,只需将其拖到您的网络表单中即可。
在您的webform代码中,您可以访问该属性。
MyControlName.MappedDataField = "whatever text";
答案 1 :(得分:0)
好的,我相信我已经解决了....我按照此链接的说明操作: http://msdn.microsoft.com/en-us/library/aa310915(v=vs.71).aspx
我从自定义控件源代码文件创建了一个.dll,然后确保.dll位于我项目的/ bin目录中。将我的注册指令改为:
<%@ Register TagPrefix="dt" Namespace="MyPersonalCareHealthRecord.classes.extended" Assembly = "TableHeaderDataCell" %>
(TableHeaderDataCell是dll文件的名称) 起初我得到一个关于类型在两个地方的错误,所以我先从bin目录中删除.cs文件才能工作。我在实际的代码隐藏文件中引用了我的新类型也遇到了一些问题,所以我必须添加一个引用并浏览到新的dll并在我的项目中添加对它的引用。添加引用后,我可以在我的代码隐藏文件中使用它。