FormView.FindControl():对象引用错误(FormView.FindControl

2019-07-19 20:12发布

我有一个具有TR / TD的内部几个文本框一个FormView。 我试图通过使用.FindControl方法获取文本框,但它回来了空。 FormView控件总是在编辑模式(所以我总是在EditItemTemplate里),我试图加载查询字符串值到从以前的页面来的文本框,所以我需要这个上的Page_Load发生。 我做这在GridView的所有这样的时候:

txtFirstName = (TextBox)fvGeneralInfo.FindControl("txtFirstName");

或者是这样的:

txtFirstName = (TextBox)fvGeneralInfo.FooterRow.FindControl("txtFirstName");

或者是这样的:

txtFirstName = (TextBox)fvGeneralInfo.Rows.FindControl("txtFirstName");

是什么赋予了?

<asp:FormView ID="fvGeneralInfo" runat="server" 
    DataSourceID="objInstructorDetails"
    OnItemCommand="fvGeneralInfo_ItemCommand"
    OnItemUpdated="fvGeneralInfo_ItemUpdated"  
    DefaultMode="Edit"
    DataKeyNames="InstructorID" >
    <EditItemTemplate>
        <table>
            <tr>
                <td colspan="2" class="Admin-SubHeading" style="padding-left:10px;">General Info:</td>
            </tr>
            <tr>
                <td class="Admin-FieldLabel">ID:</td>
                <td><asp:TextBox ID="txtInstructorId" runat="server" CssClass="Admin-Textbox" ReadOnly="true" Text='<%# Bind("InstructorID") %>' /></td>
            </tr>
            <tr>
                <td class="Admin-FieldLabel">First Name:</td>
                <td><asp:Textbox ID="txtFirstName" runat="server" CssClass="Admin-Textbox" Text='<%# Bind("FirstName") %>' /></td>
            </tr>
            </table>  
        </EditItemTemplate>
    </asp:FormView>

Answer 1:

abatishchev的答案是正确的,但我发现这种变化有点整洁:它避免了必须()显式调用DataBind。

<asp:FormView ID="fvMember" runat="server" DataSourceID="tblMembers" DefaultMode="Insert" OnDataBound="DataBound">...</asp:FormView>

protected void DataBound(object sender, EventArgs e)
{
    if (fvMember.CurrentMode == FormViewMode.Edit)
    {
        Label lblSubmit = fvMember.FindControl("lblSubmit") as Label;
        ...
    }
}


Answer 2:

调用DataBind(); 第一。 随后FindControl()



文章来源: FormView.FindControl(): object reference error