【问题标题】:How to use a custom web control?如何使用自定义 Web 控件?
【发布时间】:2013-07-31 18:31:24
【问题描述】:

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

我已经重新创建了 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 在上一行报告错误,因为程序集不正确。

是否可以在从另一个页面调用时隐藏某些控件?

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    至于隐藏控件,您可以为所欲为。只需根据您希望的任何条件将可见属性设置为 false(例如,设置用户控件的属性、查看 QueryString 值或当前页面的 URL 等)

    【讨论】:

      【解决方案3】:

      我通常只是将自定义控件添加到我的 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2011-04-15
        相关资源
        最近更新 更多