2014-12-19 29 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