2011-12-15 32 views
1
<cc1:SiteSearchInputView ID="ssInputView" ControllerID="ssController" runat="server"> 
    <ItemTemplate> 
     <table border="0" cellspacing="0" cellpadding="0"> 
       <tr> 
      <td><label>Search <asp:Literal ID="litSite" runat="server" /></label></td> 
      <td><asp:TextBox ID="tbSearchText" runat="server" /></td> 
      <td><asp:Button ID="btnSearch" CssClass="searchBTN" runat="server" /></td> 
      </tr> 
      </table> 
    </ItemTemplate> 
</cc1:SiteSearchInputView> 

我需要能够在运行时为litSite文本设置文本(它基于另一种方法进行更改)。当我尝试使用在模板usercontrol中查找子控件

Literal l = (Literal) ssInputView.FindControl("litSite"); 

我得到一个“对象未设置为对象的实例”错误。

当您无法访问模板化控件的源时,如何在模板化用户控件内设置子控件的值?

+0

你得到的异常,当你调用.FindControl(),或者当您尝试使用“L”? – n8wrl 2011-12-15 21:00:46

+0

我尝试调用FindControl时出现异常。 – Tim 2011-12-16 12:54:34

回答

0

控制器在Page_Load中绑定其数据,因此您只能在其后访问其控件。此外,您不必使用FindControl,因为子控件可以直接访问。所以这将为你工作:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    Literal1.Text = "Hello, World"; 
} 
0

如果您无权访问控件的来源,则必须通过他们为您设计的机制访问该控件。检查文档以查看它们公开的内容。

+0

这是一个用于网站搜索的Ektron模板化用户控件。 – Tim 2011-12-15 20:50:56

0

而不是写入文字,让标签调用函数来获取其文本。 在模板内部,您可以调用函数来获取数据绑定期间所需的文本。

搜索<%#将对getLabelText()%>

你会定义将对getLabelText()函数。

有一些文档,这里Ektron 8.5 SearchView