我无法检索手风琴专家组内的文本框内容。我的标记如下:
<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等世界有了新的感觉。谢谢。
答案 0 :(得分: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];
希望这会为别人节省很多时间!
答案 1 :(得分:0)
选项1 - 快速修复
对于您的网页,请在网页指令中设置ClientIDMode="static"
,然后使用Request.Form["TextBoxMediaID"]
获取文本框的值。
选项2 - 调试
转到调试模式并尝试AccordionPanel1.Controls[0].("TextBoxMediaID");
或AccordionPanel1.Controls[0].Controls[0].("TextBoxMediaID");
,因为您不知道有多少服务器端控件。简单的解决方案是使用find control recursive function。