Элемент ‘CompositeBoundField’ не является известным элементом. (попытка расширить серверное управление BoundField)

#asp.net #visual-studio #visual-studio-2010

#asp.net #visual-studio #visual-studio-2010

Вопрос:

VS2010, .Net 4.0

При попытке расширить asp.net Серверное управление BoundField, как описано здесь:
http://iridescence.no/post/FixingBoundFieldSupportforCompositeObjects.aspx

Я создал класс:

 using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{ 
    public class CompositeBoundField : BoundField
    {
        protected override object GetValue(Control controlContainer)
        {
            object item = DataBinder.GetDataItem(controlContainer);
            return DataBinder.Eval(item, this.DataField);
        }
    }
}
  

Я зарегистрировал его со своей страницы:

 <%@ Register TagPrefix="cc" Namespace="CustomControls" %>
  

… и на этой странице я пытаюсь использовать его следующим образом:

 <asp:GridView ID="gridDataSource" runat="server">
    <Columns>
        <cc:CompositeBoundField DataField="Application.ApplicationName" HeaderText="ApplicationName" />
    </Columns>
    </asp:GridView>
  

Однако я получаю предупреждение компилятора:

 Element 'CompositeBoundField' is not a known element. This can occur if there is a compilation error in the Web site, or the web.config file is missing.    
  

И когда я запускаю, я получаю сообщение об ошибке:

 Parser Error 
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Unknown server tag 'cc:CompositeBoundField'.
  

Есть идеи, что я делаю не так?

Я пробовал это:
http://blog.tentaclesoftware.com/archive/2010/07/21/95.aspx

Ответ №1:

В объявлении Register сборка обязательна:

 <%@ Register Namespace="CustomControls" TagPrefix="cc" Assembly="MyCompany.MyApp.WebApp" %>
  

Ответ №2:

Убедитесь, что атрибут Assembly содержит полное строгое имя, например

    <%@ Register Assembly="MyCompany.MyApp.WebApp, Version=3.42.0.0, Culture=neutral, PublicKeyToken=674cf0e5bf72fa08"
                TagPrefix="cc"
                Namespace="CustomControls"  @%>
  

Кроме того, вы можете столкнуться с проблемами сопоставления двух сборок с одним и тем же TagPrefix . Не делайте этого. Это может привести к непредсказуемым результатам и может внезапно перестать работать.