在回发时占位符控件集合为空

时间:2012-12-14 15:25:25

标签: c# asp.net visual-studio-2010

我在ASP.NET数据网格中有以下代码:

<asp:TemplateField HeaderText="" Visible="True" >
                            <ItemTemplate>
                            <%--<asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server" 
                                       TextMode="MultiLine" Height="76px" MaxLength="2000" Width="377px"  >
                            </asp:TextBox>--%>
                            <asp:HiddenField ID="hfQuestionID" Value='<%# Bind("QuestionID") %>' runat="server" />
                            <asp:HiddenField ID="hfAnswerID" Value='<%# Bind("AnswerID") %>' runat="server" />
                            <asp:HiddenField ID="hfAnswer" Value='<%# Bind("Answer") %>' runat="server" />
                            <asp:PlaceHolder ID="ph1" runat="server" />
                            <%--<%# GetAnswerControl(DataBinder.Eval(Container.DataItem,"QuestionID").ToString(), 
                                DataBinder.Eval(Container.DataItem,"Answer").ToString()) %>--%>
                            </ItemTemplate>
                           <EditItemTemplate>
                            <asp:HiddenField ID="hfQuestionID" Value='<%# Bind("QuestionID") %>' runat="server" />
                            <asp:HiddenField ID="hfAnswerID" Value='<%# Bind("AnswerID") %>' runat="server" />
                            <asp:HiddenField ID="hfAnswer" Value='<%# Bind("Answer") %>' runat="server" />
                            <asp:PlaceHolder ID="ph1" runat="server" />
                               <%--<asp:TextBox ID="txtAnswer" Text='<%# Bind("Answer") %>' runat="server" 
                                       TextMode="MultiLine" Height="76px" MaxLength="2000" Width="377px"  ></asp:TextBox>--%>
                           </EditItemTemplate>
                         </asp:TemplateField>

占位符使用文本框或下拉列表动态填充,具体取决于用户需要提供的答案类型。用于呈现初始答案字段(文本框或下拉列表)的代码可以正常工作。

但是,当我触发按钮单击事件时,占位符的controls属性始终为空。为什么会这样?我已经把自己的大脑震撼了好几天,对我来说没有任何意义。

我试图访问数据网格的动态添加控件的片段如下......我做错了什么?

foreach (GridViewRow r in gridUserSupplierTypeQuestionsAndAnswers.Rows)
        //if (IsRowModified(r))
        //{
        //    gridUserSupplierTypeQuestionsAndAnswers.UpdateRow(r.RowIndex, false);
        //}
        {
            PlaceHolder ph =(PlaceHolder) r.FindControl("ph1");
            Control c = ph.FindControl("Answer");
            string answer = string.Empty;
            if(c.GetType() == typeof(TextBox))
            {
                TextBox tb = (TextBox) c;
                answer = tb.Text;
            }
            else if (c.GetType() == typeof(DropDownList))
            {
                DropDownList dl = (DropDownList)c;
                answer = dl.SelectedValue;
            }

1 个答案:

答案 0 :(得分:0)

我放弃了占位符,而是使用两个控件 - 文本框和下拉列表 - 将其可见性设置为false。

我将答案类型存储在数据库中,并根据该值通过辅助函数打开相应的控件。可能有更优雅的方法来解决这个问题,但我的时间紧迫,只需要让它工作。