2015-03-07 5 views
0

У меня есть таблица HTML, как указано в моем файле разметки aspx.Literal Control в ASP.NET HTML Table

<table runat="server" id="tblSubstantialOwners"> 
         <tr id="tr_header" runat="server"> 
          <td> 
           <asp:Label ID="lblOnwerName" Text="Name" runat="server"></asp:Label> 
          </td> 
          <td> 
           <asp:Label ID="lblOwnerAddress" Text="Address" runat="server"></asp:Label> 
          </td> 
          <td> 
           <asp:Label ID="lblOwnerTIN" Text="TIN" runat="server"></asp:Label> 
          </td> 
         </tr> 

<tr> 
         <td> 
          <asp:TextBox ID="txtOwnerName1" Width="80px" runat="server" AutoCompleteType="Disabled" 
           MaxLength="20" /> 
         </td> 
         <td> 
          <asp:TextBox ID="txtOwnerAddress1" Width="80px" runat="server" AutoCompleteType="Disabled" 
           MaxLength="20" /> 
         </td> 
         <td> 
          <asp:TextBox ID="txtOwnerTIN1" Width="80px" runat="server" AutoCompleteType="Disabled" 
           MaxLength="20" /> 
         </td> 
        </tr> 
    </table> 

но когда я анализирую через C# asp.net кода, я получаю буквальный контроль в каждой ячейке HTML строки таблицы вместе с моей asp.net контроля т.е. TextBox. Почему это?

foreach (HtmlTableRow row in htmlTable.Rows) 
    { 
     if (row.ID != "tr_header") 
     { 
      for (int count = 0; count < row.Cells.Count; count++) 
      { 
       string value = string.Empty; 
       HtmlTableCell cell = row.Cells[count]; 

       foreach (Control conrol in cell.Controls) 
       { 
        if (conrol.GetType() != typeof(LiteralControl)) 
        { 
         if (conrol.GetType() != typeof(Label)) 
         { 
          if (conrol.GetType() == typeof(TextBox)) 
          { 
           datarow[count] = ((TextBox)conrol).Text; 
          } 
         } 
        } 

       } 
      } 
     } 
    } 
+0

Удалено избыточное, пересмотрено для ясности. –

ответ

0

похоже, что вы смешиваете таблицы Html и ASP.NET.

Если вы измените Html таблицу на:

<asp:Table runat="server" ID="tblSubstantialOwners"> 
    <asp:TableHeaderRow ID="tr_header" runat="server"> 
     <asp:TableHeaderCell> 
      <asp:Label ID="lblOnwerName" Text="Name" runat="server"></asp:Label> 
     </asp:TableHeaderCell> 
     <asp:TableHeaderCell> 
      <asp:Label ID="lblOwnerAddress" Text="Address" runat="server"></asp:Label> 
     </asp:TableHeaderCell> 
     <asp:TableHeaderCell> 
      <asp:Label ID="lblOwnerTIN" Text="TIN" runat="server"></asp:Label> 
     </asp:TableHeaderCell> 
    </asp:TableHeaderRow> 

    <asp:TableRow> 
     <asp:TableCell> 
      <asp:TextBox ID="txtOwnerName1" Width="80px" runat="server" AutoCompleteType="Disabled" 
       MaxLength="20" /> 
     </asp:TableCell> 
     <asp:TableCell> 
      <asp:TextBox ID="txtOwnerAddress1" Width="80px" runat="server" AutoCompleteType="Disabled" 
       MaxLength="20" /> 
     </asp:TableCell> 
     <asp:TableCell> 
      <asp:TextBox ID="txtOwnerTIN1" Width="80px" runat="server" AutoCompleteType="Disabled" 
       MaxLength="20" /> 
     </asp:TableCell> 
    </asp:TableRow> 
</asp:Table> 

И ваш код:

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     foreach (System.Web.UI.WebControls.TableRow row in tblSubstantialOwners.Rows) 
     { 
      if (row.GetType() == typeof(TableRow)) 
      { 
       for (int count = 0; count < row.Cells.Count; count++) 
       { 
        TableCell cell = row.Cells[count]; 
        datarow[count] = cell.Controls.OfType<TextBox>().FirstOrDefault().Text; 
       } 
      } 
     } 
    } 

Вы можете добраться до элементов управления, которые имеют в своих ячейках таблицы непосредственно, либо по имени, ordinality , или типа ...

+0

Спасибо, это работает – Salman

+0

Рад, что это помогло Салману, не возражаете ли вы отметить его как правильный ответ, пожалуйста? –