2013-03-21 26 views
5

Tôi đang cố gắng tạo Div động trên nhấn nút.Tạo Div động asp.net

Cho rằng tôi refered liên kết này >>http://forums.asp.net/t/1349244.aspx

và làm cho mã trên phía máy chủ (trang .cs) như sau >>

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); 
    } 

Mã này đã đem lại cho tôi chỉ là một div mỗi lần khi tôi nhấn nút., Tôi muốn có thêm divs.

Về phía khách hàng sử dụng javascript tôi cũng đã cố gắng >>

<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> 

Cả hai didnt làm việc.

Tôi đang mắc lỗi gì?

Có điều gì sai không?

+0

kiểm tra trang web của bạn là nó bị làm mới mỗi lần? – Prasad

+0

vâng nó đang được làm mới. tại sao? –

+0

sau đó mỗi lần nó sẽ tạo mới !!! nó gây ra postback – Prasad

Trả lời

2

Sử dụng này

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

Có một số vấn đề thứ hai dòng cuối cùng i.appendChild ("div"); Nó không in cảnh báo cuối cùng. –

+0

mã nào bạn đang sử dụng? Của tôi một?Tôi đã không sử dụng dòng i.appendChild ("div"). Tôi đã sử dụng i.appendChild (r) –

+0

yeah, tôi đã thử rằng cũng >> i.appendChild (r) .. nó cũng không làm việc –

0

Chỉ cần sử dụng một div cha mẹ với một số ID (được xác định trước cho phép nói id="dvDynamic") và runat="server"

và sau đó sử dụng nó dvDynamic.innerHTML = "<div> /* dynamic div contents */ </div>"

của nó cách đơn giản nhất, như thể bạn đang sử dụng phần tử html trong ASP.net sử dụng điều khiển dom cho thế hệ tốt hơn. Việc tạo điều khiển động sẽ yêu cầu xử lý, giao diện và nhiều thứ để phối hợp với điều khiển đó. Vì nó không được xác định trước bởi hệ thống. bạn phải tạo ra nó.

SO chọn tùy chọn phần tử DOM. đó là nhanh hơn và tốt hơn :)

Tôi hy vọng điều này sẽ giúp :)

+0

có nghĩa là thay vì tạo phía máy chủ div, tôi nên tạo nó trên trang aspx chỉ? –

+0

Có :) và sau đó sử dụng nó trong mã kết thúc. điều đó sẽ làm giảm công việc của bạn và sẽ dễ dàng viết mã hơn nữa :) – MarmiK

1

Nó cung cấp cho bạn một div, vì bạn đang thêm một div.
Hãy nhớ rằng asp.net cần bạn tạo tất cả các điều khiển được thêm động trên rất sau PostBack.

Nếu bạn muốn hai điều khiển, bạn phải thêm hai điều khiển vào PlaceHolder.

+0

nhưng tôi không biết có bao nhiêu người dùng div sẽ tạo ra? vì vậy tôi không thể dự đoán về số lượng trình giữ chỗ. –

+0

Một nơi giữ, nhưng khi bạn biết số, nói trên một nút bấm, sau đó bạn phải theo dõi nó. Sau đó sử dụng điều đó để tạo các div. – nunespascal

+0

okey.Dhanyawad. –

Các vấn đề liên quan