如何声明性地将ASP.NET UserControl的公共属性传递给子UserControl

时间:2014-04-29 14:26:35

标签: c# asp.net user-controls

我正在尝试清理工作中的旧ASP.NET应用程序......

我有一个名为FailedBatchPanel.ascx的父UserControl定义如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="FailedBatchPanel.ascx.cs" Inherits="Controls_FailedBatchPanel" %>
<%@ Register TagPrefix="dashboard" TagName="FailedBatch" Src="~/Controls/FailedBatchControl.ascx" %>
<%@ Import Namespace="System" %>

<div class="panel panel-default" id="failedBatchesPanel">
  <div class="panel-heading">
    <h4 class="panel-title">
      <a class="accordion-toggle" data-toggle="collapse" 
         <data-parent="#<%=ParentId %>" href="#<%=PanelId %>">
        <%=Title %>
      </a>
    </h4>
  </div>
</div>
<div id="<%=PanelId %>" class="panel-collapse collapse">
  <div class="panel-body">
    <dashboard:FailedBatch runat="server" 
      ID="failedClaims" 
      BatchType='<%$ Code: BatchType %>'/>
  </div>
</div>

子控件是FailedBatch.ascx,只包含一个带数据绑定的asp:Repeater。

父控件FailedBatchPanel的调用如下:

<dashboard:FailedBatchPanel runat="server" 
    Title="SomeTitle" 
    ParentId="categories" 
    PanelId="collapseOne" 
    BatchType="goober"/>

我想将如上所述声明性地定义的BatchType传递给嵌入FailedBatchPanel的子控件。

从上面的示例中可以看出,我尝试使用`&lt;%$ Code:...%&gt;由InfinitiesLoop在http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

定义的CodeExpressionBuilder

在我尝试的每种情况下,FailedBatch中定义的BatchType公共属性在Page_Load

时始终为null

我试过了:

  • BatchType="<%# BatchType %>" - 得到Null
  • BatchType='<%# BatchType %>' - 得到Null
  • BatchType="<%= BatchType %>" - 在这种情况下,我得到了文字“&lt;%= BatchType%&gt;”而不是null
  • `BatchType =“&lt;%$ Code:BatchType%&gt; - 得到Null

我很难过,需要帮助。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过使用DataBind语法,我们可以得到结果。

BatchType='<%# BatchType %>'

然而,正如你所说,这没有任何回报。您需要包含将控件告诉数据绑定的代码,以便评估BatchType

<% failedClaims.DataBind%>

这可以放在父用户控件中的任何位置。