0

Я создал usercontrol для использования на веб-сайте. Я пытаюсь добавить этот элемент управления одним нажатием кнопки. Я тестировал его, добавляя его динамически на страницу, но ничего не отображается.Динамическое добавление контроля пользователя

мой файл ASCX является

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RoomsUserControl.ascx.cs" Inherits="RoomsUserControl" %> 

<table> 
<tr> 
    <td><asp:TextBox ID="txtsize" runat="server"></asp:TextBox></td> 
    <td> 
     <asp:DropDownList ID="ddlRoomType" runat="server"> 
      <asp:ListItem>Master Bedroom</asp:ListItem> 
      <asp:ListItem>Bedroom</asp:ListItem> 
      <asp:ListItem>Bathroom</asp:ListItem> 
      <asp:ListItem>Kitchen</asp:ListItem> 
      <asp:ListItem>Powder Room</asp:ListItem> 
      <asp:ListItem>Dining Room</asp:ListItem> 
      <asp:ListItem>Store Room</asp:ListItem> 
      <asp:ListItem>Walkin Closet</asp:ListItem> 
     </asp:DropDownList> 
    </td> 
    <td> 
     <asp:DropDownList id="ddlLevel" runat="server"> 
      <asp:ListItem>Basement</asp:ListItem> 
      <asp:ListItem>Ground Floor</asp:ListItem> 
      <asp:ListItem>First Floor</asp:ListItem> 
     </asp:DropDownList> 
    </td> 
    <td> 
     <asp:TextBox ID="txtFlooring" runat="server"></asp:TextBox> 
    </td> 
    <td> 
     <asp:TextBox ID="txtclosetType" runat="server"></asp:TextBox> 
    </td> 
</tr> 
</table> 

с RoomsUserControl.ascx.cs файл

public partial class RoomsUserControl : System.Web.UI.UserControl 
{ 

    public string RoomSize 
    { 
     get 
     { 
      return txtsize.Text; 
     } 

     set 
     { 
      txtsize.Text = value; 
     } 
    } 

    public string RoomType 
    { 
     get 
     { 
      return ddlRoomType.SelectedItem.ToString(); 
     } 

     set 
     { 
      ddlRoomType.SelectedItem.Text = value; 
     } 
    } 

    public string RoomLevel 
    { 
     get 
     { 
      return ddlLevel.SelectedItem.ToString(); 
     } 

     set 
     { 
      ddlLevel.SelectedItem.Text = value; 
     } 
    } 

    public string RoomFlooring 
    { 
     get 
     { 
      return txtFlooring.Text; 
     } 

     set 
     { 
      txtFlooring.Text = value; 
     } 
    } 

    public string RoomCloset 
    { 
     get 
     { 
      return txtclosetType.Text; 
     } 

     set 
     { 
      txtclosetType.Text = value; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

Test кодовая страница

protected void Page_Load(object sender, EventArgs e) 
    { 
     RoomsUserControl r1 = new RoomsUserControl(); 
     r1.ID = "Room1"; 
     pl1.Controls.Add(r1); 

     RoomsUserControl r2 = new RoomsUserControl(); 
     r2.ID = "Room2"; 
     pl1.Controls.Add(r2); 

     RoomsUserControl r3 = new RoomsUserControl(); 
     r3.ID = "Room3"; 
     pl1.Controls.Add(r3); 


    } 

Когда я отладки панели pl1 содержит три UserControls но не отображается на форме.

+0

http://stackoverflow.com/questions/9069347/how-to-add-user-control -on-run-time-in-asp-net –

+0

Спасибо, bharat. Теперь он показывает, но как я могу получить значения всех текстовых полей в этом элементе управления, поскольку они недоступны одним нажатием кнопки. Как я могу создать экземпляр, чтобы использовать глобальные средства во всех методах. Благодарю. –

+0

* НомераUserControl r1 * должны быть объявлены на уровне класса, а не внутри Page_Load. Как только вы это сделаете, ** r1 ** будет доступен в ваших событиях нажатия кнопки. –

ответ

0

Вы должны изменить способ создания экземпляра пользователя control.Here, как вы должны это сделать:

protected void Page_Load(object sender, EventArgs e) 
{ 
    RoomsUserControl r1 = (RoomsUserControl)Page.LoadControl("~/RoomsUserControl.ascx"); 
    r1.ID = "Room1"; 
    pl1.Controls.Add(r1); 

    RoomsUserControl r2 = (RoomsUserControl)Page.LoadControl("~/RoomsUserControl.ascx"); 
    r2.ID = "Room2"; 
    pl1.Controls.Add(r2); 

    RoomsUserControl r3 = (RoomsUserControl)Page.LoadControl("~/RoomsUserControl.ascx"); 
    r3.ID = "Room3"; 
    pl1.Controls.Add(r3); 
} 
+0

в дополнение к этому в событии нажатия кнопки Я просто поместил код RoomsUserControl r1 = (RoomsUserControl) pl1.findcontrol («Room1»); и получить параметры в событии click. Спасибо, парни. –