2012-12-21 26 views
6

Tôi đang cố gắng thêm điều khiển trên trang asp.net C#, khi người dùng nhấp vào thêm một trang khác. Tôi đang sử dụng bảng và muốn chắp thêm các điều khiển trong bảng đó. Ngoài ra hãy cho tôi biết, Làm thế nào tôi sẽ nhận được các giá trị điều khiển trong mã sau khi một hình thức được gửi đến máy chủ.Tự động thêm điều khiển javascript Asp.net C#

Trả lời

8

Đây là một ví dụ jQuery, hy vọng nó sẽ giúp!

ASPX:

<head id="Head1" runat="server"> 
    <title>Controls</title> 
    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#btnAdd").click(function() { 
       var field = $("#field").val(); 
       var input = "<input name='parameters' id='field' type='text' />"; 
       var newRow = "<tr><td>" + field + "</td><td>" + input + "</td></tr>"; 
       $('#controls').append(newRow); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <input id="field" type="text" /> 
     <input id="btnAdd" type="button" value="Add" /> 
     <table id="controls" cellpadding="10" cellspacing="10"> 
     </table> 
     <asp:Button ID="btnProcess" runat="server" Text="Process" OnClick="Process" /> 
    </div> 
    </form> 
</body> 

Mã đằng sau

protected void Process(object sender, EventArgs e) 
{ 
    var parameters = Request.Form["parameters"]; 
    if (parameters != null && parameters.Count() > 0) 
    { 
     //Now you have access to the textbox values,perform any additional processing 
     parameters.Split(',').ToList(). 
      ForEach(p => 
      { 
       Response.Write(p + "<br />"); 
      }); 
    } 
} 

Và đây là khác nếu bạn muốn làm tất cả mọi thứ trên server.Problem với phương pháp này là khi bạn thêm điều khiển tự động chúng biến mất khi đăng bài trở lại và bạn phải tiếp tục tạo lại chúng trong Page_Load sẽ bổ sung quá trình xử lý đáng kể cho máy chủ của bạn, tôi khuyên bạn nên gắn bó với tùy chọn jQuery

ASPX:

<asp:TextBox ID="txtFieldName" runat="server"></asp:TextBox> 
<asp:Button ID="btnAddControl" runat="server" Text="Add" OnClick="Add" /> 
<asp:Table EnableViewState="true" CellPadding="2" CellSpacing="2" BorderWidth="2" BorderStyle="Solid" GridLines="Both" ID="table" 
    runat="server"> 
    <asp:TableHeaderRow> 
     <asp:TableHeaderCell Text="Field" /> 
     <asp:TableHeaderCell Text="Value" /> 
    </asp:TableHeaderRow> 
</asp:Table> 
<asp:Button ID="btnPost" runat="server" Text="Post" OnClick="Post" /> 

Mã đằng sau:

public List<string> rows = new List<string>(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ViewState["Rows"] != null) 
    { 
     rows = (List<string>)ViewState["Rows"]; 
     if (rows.Count > 0) 
     { 
      foreach (var row in rows) 
      { 
       TextBox textbox = new TextBox(); 
       textbox.Width = 300; 
       table.Rows.Add(GetRow(row,textbox)); 
      } 
     } 
    } 
} 

protected void Add(object sender, EventArgs e) 
{ 
    string row = txtFieldName.Text; 
    if (!String.IsNullOrEmpty(row)) 
    { 
     rows.Add(txtFieldName.Text); 

     TextBox textbox = new TextBox(); 
     textbox.Width = 300; 
     table.Rows.Add(GetRow(row, textbox)); 
     ViewState["Rows"] = rows; 
    } 
} 

private TableRow GetRow(string text, WebControl txtName) 
{ 
    TableRow tr = new TableRow(); 

    TableCell cell1 = new TableCell(); 
    cell1.Text = text; 

    TableCell cell2 = new TableCell(); 
    cell2.Controls.Add(txtName); 

    tr.Cells.Add(cell1); 
    tr.Cells.Add(cell2); 

    return tr; 
} 

protected void Post(object sender, EventArgs e) 
{ 
    if (table.Rows.Count > 0) 
    { 
     System.Diagnostics.Debugger.Break(); 
     //i=1 because we want to skip the header row 
     for (int i = 1; i < table.Rows.Count; i++) 
     { 
      //Examine the values and do further processing... 
      string field = table.Rows[i].Cells[0].Text; 
      string value = ((TextBox)table.Rows[i].Cells[1].Controls[0]).Text; 
     } 
    } 
} 
1

Nếu bạn đang thêm điều khiển phía máy khách động, chúng sẽ nằm trong đối tượng Request.Form dưới dạng giá trị. Bạn có thể lặp lại nội dung của bộ sưu tập này. Xin lưu ý rằng bảng sẽ phải được chứa trong một phần tử biểu mẫu nếu không chúng sẽ không được đăng.

+0

là nó có thể để thêm thông qua máy chủ, tôi đã từng làm tại phía khách hàng. nhưng ở đây tôi muốn làm tại serverside, vì vậy tôi có thể nhận được tất cả các giá trị trong codebehind –

+0

Chỉ như là một phần của một repost, mà là clunky từ một quan điểm UI IMHO. Bằng cách sử dụng Request.Form bạn * có thể * nhận được các giá trị trong codebehind. –

+0

Bạn có thể sử dụng các bảng cập nhật nhưng chúng thực sự là một repost được xếp chồng lên nhau và gây ra rất nhiều phía máy chủ chất thải. –

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