如何使用自定义Web控件?

时间:2013-07-31 18:31:25

标签: asp.net vb.net user-controls

我想创建一个封装以下控件的控件:

Controls

我已经重新创建了HTML(借助丑陋的表用法,直到我用div和CSS清理它),就像在控件.ascx文件中一样:

<%@ Control Language="VB" AutoEventWireup="false" 
CodeFile="MultiLevelReportFilter.ascx.vb" 
Inherits="controls.MultiLevelReportFilter" %>

<%@ Register TagPrefix="cc1" Namespace="UNLV.IAP.WebControls" 
Assembly="DropDownCheckList" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />

  <title></title>
  <style type="text/css">
/*<![CDATA[*/
  tr.c2 {display: none;}
  td.c1 {font-weight: bolder; color: Red; font-size: 10pt;}
  /*]]>*/
  </style>
</head>

<body>
  <table width="98%" cellspacing="0" cellpadding="15" align="center">
    <tr>
      <td width="40%" valign="top">
        <table width="600" cellspacing="0" cellpadding="4">
          <tr>
            <td colspan="2" class="txtLabel c1" align="center">Sales as of</td>
          </tr>

          <tr>
            <td align="right" class="txtLabel" width="200">Period&nbsp;</td>

            <td class="txtLabel" width="400"></td>
          </tr>

          <tr class="c2">
            <td align="right" class="txtLabel" width="200">Year&nbsp;</td>

            <td class="txtLabel" width="400">&nbsp; Month&nbsp;</td>
          </tr>

          <tr>
            <td align="right" class="txtLabel" width="200">Accounts Filter&nbsp;</td>

            <td></td>
          </tr>

          <tr>
            <td align="right" class="txtLabel" width="200">Brands Filter&nbsp;</td>

            <td></td>
          </tr>

          <tr id="Tr1" runat="server" visible="false">
            <td align="right" valign="top" class="txtLabel" width="200">Business
            Groups</td>

            <td></td>

            <td></td>
          </tr>

          <tr>
            <td align="right" valign="top" class="txtLabel" width="200">Measurement</td>

            <td>&nbsp;&nbsp; <span class="txtLabel">Display</span> &nbsp;&nbsp;</td>

            <td></td>
          </tr>
        </table>
      </td>

      <td width="60%" valign="top">
        <table width="200">
          <tr>
            <td width="20"><img src="/images/ico_graph1.gif" runat="server" id=
            "iGenerate" /></td>

            <td width="180">Generate&nbsp;Report</td>
          </tr>

          <tr>
            <td width="20"><img src="/images/ico_print.gif" runat="server" id=
            "iPrint" /></td>

            <td width="180">Print</td>
          </tr>

          <tr>
            <td width="20"><img src="/images/ico_excel.jpg" runat="server" id=
            "iExport" /></td>

            <td width="180">Export&nbsp;To&nbsp;Excel</td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</body>
</html>

我的问题是双重的:

如何在其他网页上添加此内容?

我试图注册我的控件并引用它,但我错过了程序集信息。我似乎无法找到有关如何在程序集中注册控件的任何信息:

<%@ Register TagPrefix="cc1" Namespace="Controls.MultiLevelReportFilter" 
Assembly="MultiLevelReportFilter" %>

Visual Studio在上面的行上报告错误,因为程序集不正确。

从其他网页调用此功能时是否可以隐藏某些控件?

3 个答案:

答案 0 :(得分:1)

你的控件继承了controls.MultiLevelReportFilter(little c),而你的Register标签使用了Controls.MultiLevelReportFitler(big C),这可能是你问题的一部分。

或者,您可以使用以下语法:

<%@ Register TagPrefix="cc1" TagName="MultiLevelReportFitler" Src="/Controls/MultiLevelReportFitler.ascx" %>

请注意,假定用户控件存在于您使用它的同一个Web应用程序中。

就隐藏控制而言,你可以做任何你想做的事。只需根据您希望的任何条件将visible属性设置为false(例如,设置用户控件的属性,查看QueryString值或当前页面的URL等)。

答案 1 :(得分:1)

用户控件不是自定义服务器控件。

如果您在同一个项目中使用了ascx,只需进入设计模式并将其拖到您想要的页面上即可。

如果你想在同一个解决方案中分享多个项目,Scott Gu写了一篇文章解释如何reference and use your user controls

如果没有,最好是create a server control

答案 2 :(得分:1)

我通常只是将自定义控件添加到我的web.config:

<system.web>
  <pages>
    <controls>
      <add tagPrefix="CC1" src="~/UserControls/ControlName.ascx" tagName="TagName" />
    </controls>
  </pages>
</system.web>

现在,您可以在页面中执行以下操作:

<CC1:TagName runat="server" ID="TagName1" />

在用户控件中,您可以创建隐藏任何控件的函数或属性。然后从父页面调用:

TagName1.Function(); 

TagName1.Property = value;