2014-08-28 2 views
0

Я работаю над веб-приложением asp.net. Я динамически создаю элементы управления на одной странице с помощью пользовательского элемента управления-заполнителя. внутри заполнитель есть несколько текстовых полей.Как получить идентификатор на стороне сервера для элементов управления внутри PlaceHolder в веб-приложении Asp.Net?

Я запускаю этот код в цикле for.

phSchemaEMITenureDetails.Controls.Add(LoadControl("~/UserControl/SchemaEMITenureDetails.ascx")); 

означает, что я хочу создать несколько наборов этих текстовых полей.

Все работает нормально, но теперь я хочу получить текстовые данные, введенные пользователем в этих текстовых блоках на стороне сервера. Поэтому мне нужен идентификатор этих элементов управления на стороне сервера.

Я не могу это получить. Пожалуйста, помогите мне

управления пользователя:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SchemaEMITenureDetails.ascx.cs" Inherits="PaymentControllerGUI.SchemaEMITenureDetails" %> 
<asp:Label runat="server" ID="SchemaRowName"></asp:Label> 
<asp:Table runat="server"> 
    <asp:TableRow runat="server" ID="SchemaEMITenure03MonthRow" Style="display: none;"> 
     <asp:TableCell> 
      <asp:Label runat="server" Text="EMI 03 Months" ID="SchemaEMITenure03MonthLabel"> 
      </asp:Label> 
     </asp:TableCell> 
     <asp:TableCell> 
<asp:TextBox runat="server" ID="SchemaEMITenure03MonthTextBox"> 
</asp:TextBox> 
     </asp:TableCell> 
    </asp:TableRow> 

    <asp:TableRow runat="server" ID="SchemaEMITenure06MonthRow" Style="display: none;"> 
     <asp:TableCell> 
      <asp:Label runat="server" Text="EMI 06 Months" ID="SchemaEMITenure06MonthLabel"> 
      </asp:Label> 
     </asp:TableCell> 
     <asp:TableCell> 
      <asp:TextBox ID="SchemaEMITenure06MonthTextBox" runat="server"> 
      </asp:TextBox> 
     </asp:TableCell> 
    </asp:TableRow> 

    <asp:TableRow runat="server" ID="SchemaEMITenure09MonthRow" Style="display: none;"> 
     <asp:TableCell> 
      <asp:Label runat="server" Text="EMI 09 Months" ID="SchemaEMITenure09MonthLabel"> 

      </asp:Label> 
     </asp:TableCell> 
     <asp:TableCell> 
      <asp:TextBox ID="SchemaEMITenure09MonthTextBox" runat="server"> 
      </asp:TextBox> 
     </asp:TableCell> 
    </asp:TableRow> 

    <asp:TableRow runat="server" ID="SchemaEMITenure12MonthRow" Style="display: none;"> 
     <asp:TableCell> 
      <asp:Label runat="server" Text="EMI 12 Months" ID="SchemaEMITenure12MonthLabel"> 
      </asp:Label> 
     </asp:TableCell> 
     <asp:TableCell> 
      <asp:TextBox ID="SchemaEMITenure12MonthTextBox" runat="server"> 
      </asp:TextBox> 
     </asp:TableCell> 
    </asp:TableRow> 

</asp:Table> 

Страница ASPX:

<asp:PlaceHolder ID="phSchemaEMITenureDetails" runat="server"></asp:PlaceHolder> 

Page Aspx.cs: phSchemaEMITenureDetails.Controls.Add(LoadControl("~/UserControl/SchemaEMITenureDetails.ascx"));

ответ

0

Update ypur файл ASCX как это (Просто добавьте идентификатор таблицы)

<asp:Table runat="server" ID="tbl"> 
     <asp:TableRow runat="server" ID="SchemaEMITenure03MonthRow" Style="display: none;"> 
      <asp:TableCell> 
       <asp:Label runat="server" Text="EMI 03 Months" ID="SchemaEMITenure03MonthLabel"> 
       </asp:Label> 
      </asp:TableCell> 
      <asp:TableCell> 
    <asp:TextBox runat="server" ID="SchemaEMITenure03MonthTextBox"> 
    </asp:TextBox>.... 

..... Теперь ваше текстовое поле идентификатор «SchemaEMITenure03MonthTextBox»

Вы можете получить доступ этот текст на ASPX как:

string value = (tbl.FindControl("SchemaEMITenure03MonthTextBox") as TextBox).Text; 

Вы должны использовать FindControl метод, если ваше текстовое поле внутри какой-либо другой управления ... Просто используйте идентификатор родительского контроля затем применить Findcontrol.If вашего внутреннего контроля более чем один родительского, то вы должны использовать FindControl для многократного времени, как это

Строковое значение = (TopParent.FindControl («InnerParent»). FindControl («TextBox») как TextBox) .Text;

В этом примере текстовое поле находится внутри двух родителей, как этот

TopParent InnerPArent Textbox ....

Надежда Это heplp

0

Вы можете попытаться идти через элементы управления, и получение значений, если элемент управления является текстовым полем:

System.Text.StringBuilder result = new System.Text.StringBuilder(); 

protected void cmdOK_Click(object sender, EventArgs e) 
{ 
    this.GetValues(this.phSchemaEMITenureDetails, this.result); 
    this.litResult.Text = this.result.ToString(); 
} 

private void GetValues(Control control, System.Text.StringBuilder strBuilder) 
{   

    if(control.HasControls()) 
    { 
     foreach (Control item in control.Controls) 
     { 
      if (item is TextBox) 
      { 
       TextBox cntrl = (TextBox)item; 
       strBuilder.AppendLine(cntrl.ID.ToString() + " = " + cntrl.Text + "<br/>"); 
      } 

      if (item.HasControls()) 
      { 
       this.GetValues(item, strBuilder); 
      } 
     } 
    } 
} 

Я уверен, что вы можете сделать некоторые улучшения в этом коде. Но это идея, которая приходит мне на ум, чтобы решить вашу проблему.

Смежные вопросы