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 文字设置文本(它会根据另一种方法更改)。当我尝试使用

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

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

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

4

3 回答 3

0

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

于 2011-12-15T20:49:03.040 回答
0

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

protected void Page_PreRender(object sender, EventArgs e)
{
    Literal1.Text = "Hello, World";
}
于 2011-12-16T15:33:04.987 回答
0

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

搜索 <%# GetLabelText() %>

您将定义 GetLabelText() 函数。

这里有一些文档Ektron 8.5 SearchView

于 2011-12-18T02:09:14.837 回答