2013-03-21 17 views
5

Próbuję dynamicznie utworzyć Div po naciśnięciu przycisku.Dynamiczne tworzenie Div asp.net

za to skieruję ten link >>http://forums.asp.net/t/1349244.aspx

i wykonane kodu po stronie serwera (.cs strona) następująco >>

public static int i = 0; 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     i++; 
     HtmlGenericControl newControl = new HtmlGenericControl("div"); 

     newControl.ID = "NEWControl"+i; 
     newControl.InnerHtml = "This is a dynamically created HTML server control."; 

     PlaceHolder1.Controls.Add(newControl); 
    } 

Ten kod daje mi tylko jedno div za każdym razem, kiedy Nacisnęłam przycisk., Chciałem dodać DIV.

po stronie klienta przy użyciu JavaScript również próbowałem >>

<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" OnClientClick="addDiv();" /> 

    </div> 
    <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
    </form> 
</body> 
</html> 
<script type="text/javascript"> 
    function addDiv() { 
     alert("Control comming in function"); 
     var r = document.createElement('Div'); 
     r.style.height = "20px"; 
     r.style.width = "25px"; 
     r.appendChild("div"); 
     alert("Control going out of function"); 
    } 
</script> 

Oba te nie działał.

Jaki błąd popełniam?

Czy coś jest nie tak?

+0

sprawdzić swoją stronę Robi odświeżane za każdym razem? – Prasad

+0

Tak, to się odświeżało. czemu? –

+0

następnie za każdym razem będzie tworzyć nowe !!! to powoduje odświeżenie – Prasad

Odpowiedz

2

Użyj tego

public int Index 
    { 
     get 
     { 
      if(ViewState["Index"]==null) 
      { 
      ViewState["Index"]=0; 
      } 
      else 
      { 
      ViewState["Index"]=int.Parse(ViewState["Index"].ToString())+1; 
      } 

      return int.Parse(ViewState["Index"].ToString());  
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     HtmlGenericControl newControl = new HtmlGenericControl("div"); 
     newControl.ID = "NEWControl"+Index; 
     newControl.InnerHtml = "This is a dynamically created HTML server control."; 

     PlaceHolder1.Controls.Add(newControl); 
    } 
+0

Istnieje pewien problem drugi ostatni wiersz i.appendChild ("div"); To nie jest ostatni ostrzeżenie. –

+0

którego kodu używasz? Mój jeden?Nie użyłem linii i.appendChild ("div"). Użyłem i.appendChild (r) –

+0

tak, próbowałem również >> i.appendChild (r) .. też nie pracował –

0

Wystarczy użyć jednego div z jakimś ID (ustawionego powiedzmy id="dvDynamic") i runat="server"

a następnie użyć go do dvDynamic.innerHTML = "<div> /* dynamic div contents */ </div>"

Jego najprostszy sposób, jak w przypadku korzystania z elementu HTML w ASP.net użyj kontrolek dom dla lepszego generowania. Dynamiczne tworzenie kontroli będzie wymagało obsługi, interfejsu i wielu rzeczy do skoordynowania z tą kontrolą. Ponieważ nie jest predefiniowany przez system. musisz go stworzyć.

WIĘCEJ wybierz opcję DOM element. że jest szybszy i lepiej :)

Mam nadzieję, że to pomoże :)

+0

oznacza zamiast tworzenia strony serwera div, powinienem utworzyć go tylko na stronie aspx? –

+0

Tak :), a następnie użyj go w kodzie zwrotnym. to zmniejszy twoją pracę i będzie łatwe do kodowania dalej :) – MarmiK

1

To daje jeden div, bo dodajesz jeden div.
Należy pamiętać, że asp.net potrzebuje, aby po tej operacji utworzyć wszystkie dynamicznie dodawane kontrolki w bardzo PostBack.

Jeśli chcesz dwie kontrolki, musisz dodać dwa do PlaceHolder.

+0

, ale nie wiem, ilu użytkowników div utworzy? więc nie mogę przewidzieć liczby elementów zastępczych. –

+0

Uchwyt na jedno miejsce, ale kiedy znasz numer, powiedzmy przyciskiem myszy, musisz go śledzić. Następnie użyj tego, aby utworzyć elementy div. – nunespascal

+0

okey.Dhanyawad. –

Powiązane problemy