title: Get Value of Html Input Inside TemplateField of GridView
body: <p>In the following example, I am unable to get the value of the tel input "Contract".  I do not have any issues with the DropDownList.</p>
  
  <p>aspx Code:</p>
  
  <pre><code>&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                  DataKeyNames="Serial,Model" DataSourceID="ObjectDataSource1" Width="50%" GridLines="None" CellSpacing="-1"&gt;
                      &lt;Columns&gt;
                          &lt;asp:BoundField DataField="Serial" HeaderText="Serial" /&gt;
                          &lt;asp:BoundField DataField="Model" HeaderText="Model"/&gt;
                          &lt;asp:TemplateField HeaderText="Status"&gt;
                          &lt;ItemTemplate&gt;
                              &lt;asp:DropDownList ID="Status" CssClass="dropdownlist" runat="server" onfocus="setSelectedRow(this)" DataValueField="Status" SelectedValue='&lt;%# Bind("Status") %&gt;' onChange="statusChange(this)"&gt;
                                  &lt;asp:ListItem Value="RENT READY"&gt;Rent Ready&lt;/asp:ListItem&gt;
                                  &lt;asp:ListItem Value="ON RENT"&gt;On Rent&lt;/asp:ListItem&gt;
                                  &lt;asp:ListItem Value="OOS"&gt;Out of Service&lt;/asp:ListItem&gt;
                              &lt;/asp:DropDownList&gt;                               
                              &lt;input type="tel" id="Contract" onfocus="setSelectedRow(this)" value= '&lt;%# Eval("Contract") %&gt;' placeholder="Contract #" class='&lt;%# (string)Eval("Status") == "ON RENT" ? "textBox" : "textBoxHidden" %&gt;'&gt;&lt;/input&gt;
                          &lt;/ItemTemplate&gt;
                      &lt;/asp:TemplateField&gt;
  &lt;/asp:GridView&gt;
  </code></pre>
  
  <p>Rendered HTML:</p>
  
  <p><img src="https://i.stack.imgur.com/KQX5D.png" alt="enter image description here"></p>
  
  <p>What I've tried so far:</p>
  
  <pre><code>protected void submit_Click(object sender, EventArgs e)
  {
     if (!Page.IsValid) return;
     foreach(GridViewRow row in GridView1.Rows)
     {
        string Serial = row.Cells[0].Text;
        string Model = row.Cells[1].Text;
        string Status = ((DropDownList)row.FindControl("Status")).SelectedValue;
        string Contract =  Any one of the below attempts...
  
        Sql stored procedure integrating the data back to the server...
     }
  }
  
   string Contract = ((HtmlInputControl)row.FindControl("Contract")).Value;
  
   string Contract = ((HtmlInputText)row.FindControl("Contract")).Value;
  
   string Contract = ((TextBox)row.FindControl("Contract")).Text;
  </code></pre>
  
  <p>All throw Object Reference Not Set to Instance of Object exception.</p>