2014-12-19 41 views
1

我想添加一个新的自定义网页控制到我的asp.net应用程序。错误继承网页控制

这里是我的自定义控制代码

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’是不是有效的在这里,因为它不公开的类型。” 进一步研究和发现这个计算器文章How to use a Subclassed Control on an ASP.NET Page? 后,我试图改变我的注册指令

<%@ Register TagPrefix="dt" TagName="TableHeaderDataCell" namespace="MyPersonalCareHealthRecord" assembly="MyPersonalCareHealthRecord" %> 

这就造成了错误:“该指令缺少‘SRC’属性”。 添加src属性给了我一个错误:“当'tagname'属性存在时,'该命名空间'属性不支持此指令。”

删除标记名属性给我的错误,并删除命名空间标记名都以及....

我意识到这是一个漫长的问题,但任何人都可以帮我吗?我不知道我做错了什么。

+1

它看起来像你试图将源指向一个类文件,自定义用户控件应该是ascx。我想,你是否真的去添加新文件,然后单击webforms用户控件或添加类? – prospector 2014-12-19 05:59:59

+0

@prospector我只是添加了类...我会尝试.ascx文件,看看会发生什么,(原谅我,我是新来的asp.net),但是我会在ascx文件中放入什么,因为唯一的变化是I我正在做的是添加一个成员的源代码? – pscapng 2014-12-19 06:24:09

回答

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,并在我的项目中添加一个引用。添加引用后,我可以在我的代码隐藏文件中使用它。

1

转到添加Webforms用户控件。

一旦你添加它到代码的控制(CS文件)的后面,你可以把你的财产有

public string MappedDataField { get; set; } 

保存它。

转到解决方案资源管理器,并将其拖动到您的Web表单中。

在您的webform代码中,您可以访问该属性。

MyControlName.MappedDataField = "whatever text"; 
+0

我在看到这篇文章之前就已经解决了这个问题(请参阅我的回答)。我可能也会试着走这条路线,看看哪个更容易/效果更好。尝试后,我会选择一个答案。感谢您的帮助。 – pscapng 2014-12-19 07:08:54

+0

对不起,这没有奏效。我实际上试图扩展一个“Web”控件而不是一个“用户”控件......我尝试使用你的建议,但有一些错误。如果我试图扩展用户控件,这可能会正常工作。 – pscapng 2014-12-19 07:27:43