2012-03-23 1 views
0

HTMLПолучить значение времени выполнения добавил управления

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <asp:Button runat="server" ID="show" OnClick="show_Click" Text="show"/> 
    <asp:Button runat="server" ID="add" OnClick="add_Click" Text="add new "/> 
    <div id="content" runat="server"></div> 
</asp:Content> 

код

protected void show_Click(object sender, EventArgs e) 
{ 
    Response.Write(((CheckBox) content.FindControl("chb")).Checked); 
} 
protected void add_Click(object sender, EventArgs e) 
{ 
    CheckBox chb = new CheckBox(); 
    chb.ID = "chb"; 
    chb.Text = "chb"; 
    content.Controls.Add(chb); 

} 

кнопкой add добавлен новый checkbox во время выполнения.

тогда я хочу получить флажок chb кнопкой show

но ((CheckBox) content.FindControl("chb")).Checked возвратного Null.

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

ответ

0

Ваши события не происходят в том же обратном направлении на вашей странице - при нажатии кнопки add он добавляет флажок, но затем выполнение страницы заканчивается, страница отправляется клиенту, и это делается с обработкой этого события Click.

Когда вы нажимаете кнопку show, это еще один ответ, в котором ваш флажок не был создан, поэтому его не существует.

Чтобы справиться с этим, у вас есть несколько вариантов:

1. Добавить флажок на страницу в дизайнере и установить его свойство Visible к false inially. Вы можете сохранить кнопку add, но на самом деле она не добавит флажок на эту страницу, она просто сделает ее видимой, установив Visible на true.

2. Если вы действительно хотите динамически добавить этот флажок, вам нужно добавлять его каждый раз, когда страница выполняется, в одном из обработчиков событий страницы (например, Load). Способ сделать это - сохранить значение в представлении или в скрытом поле, когда вы нажмете add и в зависимости от значения вы создадите флажок при последующих обратных передачах.

protected void Page_Load (object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     if (Session["chb"] != null) 
      CreateChb(); 
    } 
} 
protected void show_Click(object sender, EventArgs e) 
{ 
    Response.Write(((CheckBox) content.FindControl("chb")).Text); 
} 
protected void add_Click(object sender, EventArgs e) 
{ 
    Session["chk"] = true; 
    CreateChb(); 
} 
private void CreateChb() 
{ 
    CheckBox chb = new CheckBox(); 
    chb.ID = "chb"; 
    chb.Text = "chb"; 
    content.Controls.Add(chb); 
} 
+0

я хочу добавить флажок динамически, а затем проверить, что из них проверяется верно – user1263390

+0

Если вы хотите сохранить состояние чекбокса, вы были бы гораздо лучше создать элемент управления флажок в конструкторе и показывать его/скрывая его при необходимости. Вы можете сделать это динамически, но вам придется в основном сохранить состояние динамического управления самостоятельно, что будет большой работой. Если вы планируете добавлять более одного элемента управления динамически, вам придется выполнить эту работу для всех. Почему вы хотите динамически добавлять элементы управления? – xxbbcc

+0

Если вы действительно планируете добавить 100 флажков на страницу таким образом, у вас будет какая-то серьезная работа - если вам действительно не нужно это делать, это неправильный подход. – xxbbcc

0

Это происходит потому, что динамически добавленные элементы управления не сохраняются после обратной передачи. Вы можете легко продемонстрировать это, добавив еще одну кнопку (без обработчика события клика) на страницу. Запустите приложение и нажмите кнопку «Добавить», чтобы создать этот флажок, затем нажмите кнопку «Недавно добавленная», и флажок уйдет после обратной передачи.

0

Ну, я не могу понять, чего вы пытаетесь достичь, но;

protected void show_Click(object sender, EventArgs e) 
    {    
     Response.Write((Session["chb"] as CheckBox).Text); 
    } 
    protected void add_Click(object sender, EventArgs e) 
    { 
     CheckBox chb = new CheckBox(); 
     chb.ID = "chb"; 
     chb.Text = "chb"; 
     content.Controls.Add(chb); 
     Session["chb"] = chb; 

    } 
+0

Ваш пример работает, но я не думаю, что очень хорошая идея держать элементы управления в сеансе.(Хотя я лично не думаю, что это хорошая идея динамически добавлять элементы управления, кроме как в нескольких сценариях :) :) – xxbbcc

+0

, если у меня есть 2000 пользователей и 100 флажок для каждого пользователя, тогда память ????????? – user1263390

+0

@xxbbcc Вы правы, но, как я сказал в своем ответе, я не понял цели. – daryal

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