0

我无法检索手风琴面板内的文本框的内容。我的标记如下:

<juice:Accordion ID="Accordion1" runat="server">

<juice:AccordionPanel ID="AccordionPanel1" runat="server" Title="Media ID">
<PanelContent>
  <asp:Label ID="LabelMediaID" runat="server" Text="Media ID"     AssociatedControlID="TextBoxMediaID"></asp:Label>    
  <asp:TextBox ID="TextBoxMediaID" runat="server"></asp:TextBox>
</PanelContent>
</juice:AccordionPanel>

当用户点击一个按钮时,我的服务器端代码被触发:

protected void ButtonSearch_Click(object sender, EventArgs e)
{
    // Retrieve controls within accordion panels
    TextBox TextBoxMediaID = (TextBox)AccordionPanel1.FindControl("TextBoxMediaID");
    string mediaID= "abc";
    if (TextBoxMediaID != null)
        mediaID= TextBoxMediaID.Text;

我能够成功检索我的文本框控件,但是当我尝试访问其 Text 属性时,它始终为空。

有人能帮我吗?恐怕我对 ASP.NET、Juice 等世界还很陌生。谢谢。

4

2 回答 2

1

事实证明,我的问题是由使用母版页的 ASP.NET 项目引起的。

如果您不使用母版页,那么

TextBox TextBox1 = (TextBox)AccordionPanel1.FindControl("TextBox1");
string content= Request.Form[TextBox1.UniqueId];

完美运行。但是,当使用带有 ContentPlaceHolder 的母版页时,请使用以下代码:

ContentPlaceHolder cph = (ContentPlaceHolder)Master.FindControl("MainContent");
TextBox TextBox1 = (TextBox)AccordionPanel1.FindControl("TextBox1");
string content= Request.Form[cph.UniqueID + "$" + TextBox1.UniqueId];

希望这会节省很多人的时间!

于 2013-01-07T17:29:43.957 回答
0

选项 1 - 快速修复

对于您的页面,请ClientIDMode="static"在页面指令中生成,然后用于Request.Form["TextBoxMediaID"]获取文本框的值。

选项 2 - 调试

转到调试模式并尝试AccordionPanel1.Controls[0].("TextBoxMediaID");,或者 AccordionPanel1.Controls[0].Controls[0].("TextBoxMediaID");因为您不知道有多少服务器端控件。简单的解决方案是使用查找控制递归函数

于 2012-12-11T12:13:10.667 回答