如何实现C#自定义服务器控件?(How to implement a C# custom serve

2019-10-18 13:15发布

我想实现使用一个自定义的控制RowClickableGridView提供一流该堆栈溢出职位 。 这是我第一次尝试创建一个自定义服务器控件,并遵循布局的步骤这个MSDN演练 。

我有RowClickableGridView在类App\_Code我的Web应用程序项目的目录中的名称空间MyWebApplication.App\_Code ,并将其编译。

我的问题是, .aspx ,我试图用控制上无法识别标记前缀页。 该页面还对之间不支持的元素多次警告cc1:GridViewRowClickable标签。 我以为我根据MSDN演练已经一切就绪。

代码段

<%@ Page Title="MyPage" Language="C#" MasterPageFile="~/MyMaster.master" AutoEventWireup="true" Inherits="MyPage" Codebehind="MyPage.aspx.cs" %>
<%@ Register TagPrefix="cc1" TagName="RowClickableGridView" Namespace="MyWebApplication.App_Code" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" SelectCommand="MySpName" SelectCommandType="StoredProcedure">
    </asp:SqlDataSource>
    <cc1:RowClickableGridView ID="GVW_test" runat="server" DataSourceID="SqlDataSource1">
        <HeaderStyle CssClass="ListTop" />
        <RowStyle CssClass="RowHighlight" />
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="Atr_ID" SortExpression="Atr_ID" />
            <asp:BoundField HeaderText="Name" DataField="Atr_Name" SortExpression="Atr_Name" />
        </Columns>
        <EmptyDataTemplate>
            No Data
        </EmptyDataTemplate>
   </cc1:RowClickableGridView>
</asp:Content>

在我做什么尝试下一个错误或建议的任何想法?

Answer 1:

您已指定“RowClickableGridView”作为标记名,但你在代码中使用“GridViewRowClickable”。



Answer 2:

我得到了它的最后工作。 我采取了不同的方法,但。

  1. 创建一个新的ASP.NET服务器控件项目
  2. 复制类为默认的CS文件并重新命名的命名空间。
  3. 添加默认的TagPrefix到线以上的命名空间声明。
    [assembly: TagPrefix("mynamespace", "mycustomtag")]
  4. 添加ToolBoxData排队上面的类复制。
    [ToolboxData("<{0}:GridViewRowClickable runat=server></{0}:GridViewRowClickable>")]
  5. 项目建设成为DLL
  6. 复制DLL到Web应用程序的bin目录
  7. 在Web应用程序项目引用的DLL
  8. 通过增加从DLL创建一个新的工具箱项添加控件工具箱
  9. 拖动并从工具箱中拖放到控制aspx页面

这增加了相应的Register指令在aspx页面的顶部,并修复了所有我收到的警告。 自动完成也能在这种情况下也是如此。

下面是代码。

<%@ Page Title="" Language="C#" MasterPageFile="~/MyMaster.master" AutoEventWireup="true" Inherits="MyPage" Codebehind="MyPage.aspx.cs" %>
<%@ Register Assembly="GridViewRowClickable" Namespace="CustomServerControls" TagPrefix="MyTag" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:SqlDataSource ID="Sql_MyTable" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
        SelectCommand="spTbl_Select" SelectCommandType="StoredProcedure">
    </asp:SqlDataSource>
    <egcc:GridViewRowClickable ID="GridViewRowClickable_test" runat="server" 
        DataSourceID="Sql_MyTable" DataKeyNames="tbl_id"
        AllowSorting="True" AutoGenerateColumns="False" GridLines="None" PageSize="25" Width="100%"
        EnableRowClickSelection="true" RowClickCommand="Select" OnSelectedIndexChanged="GridViewRowClickable_test_OnSelectedIndexChanged">
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="tbl_id" SortExpression="tbl_id" />
            <asp:BoundField HeaderText="Name" DataField="tbl_name" SortExpression="tbl_name" />
        </Columns>
        <EmptyDataTemplate>
            No Data.
        </EmptyDataTemplate>
    </egcc:GridViewRowClickable>
</asp:Content>


文章来源: How to implement a C# custom server control?