2012-12-09 3 views
1

Я пытаюсь получить текст из текстового поля с динамическим крахом сервера. Я просто проверяю, получив текст в другое текстовое поле, которое я разместил в aspx-файле, но все, что я получаю, всегда является пустой строкой. (Я также попробовал другой метод, прилагаемый к примечанию, но он не работает либо)Найти динамически добавленный серверный контроль и использовать его HTML

Вот код позади:

public partial class Product_list : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     create_table(); 
    } 

    protected void create_table() 
    { 
     DBServices db1=new DBServices(); 
     List<Product> list1 = db1.ReadProducts(); 
     int id_number=1; 
     int id_numer2 = 7; 
     int id_number3 = 13; 

     Table tbl = new Table(); 
     tbl.ID = "tbl1"; 
     this.Controls.Add(tbl); 

     foreach (Product p1 in list1) 
     { 
      TableRow rw = new TableRow(); 
      rw.ID = Convert.ToString(id_numer2); 

      TableCell cell1 = new TableCell(); 
      cell1.Text = p1.Name; 

      TableCell cell2 = new TableCell(); 

      Image img = new Image(); 
      img.ImageUrl = p1.ImagePath; 
      img.Height = 50; 
      img.Width = 50; 

      cell2.Controls.Add(img); 

      TableCell cell3 = new TableCell(); 
      cell3.ID = Convert.ToString(id_number3); 

      TextBox textbox1 = new TextBox(); 
      textbox1.ID = Convert.ToString(id_number); 

      cell3.Controls.Add(textbox1); 

      rw.Controls.Add(cell1); 
      rw.Controls.Add(cell2); 
      rw.Controls.Add(cell3); 

      tbl.Controls.Add(rw); 

      id_number++; 
      id_numer2++; 
      id_number3++; 
     } 
    } 

    void save_list() 
    { 
     List<Product> Items_list = new List<Product>(); 

     //TextBox aControl =Page.FindControl("1") as TextBox; 

     /var tbl1 = this.Page.FindControl("tbl1") as Table; 
     var tr = tbl1.FindControl("7") as TableRow; 
     var td = tr.FindControl("13") as TableCell; 
     var txt = td.FindControl("1") as TextBox; 

     txt1.Value = txt.Text; 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     save_list(); 
    } 
} 

и вот код ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Product_list.aspx.cs" Inherits="Product_list" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script runat=server> 
     public override void VerifyRenderingInServerForm(Control control) 
     { 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div id="header"> 
      <h1>Items List</h1> 
     </div> 

     <div id="prod_table" runat="server"></div> 
     <div> 
      <input type="text" runat="server" id="txt1" /> 
      <asp:Button ID="Button1" runat="server" Text="Button" 
       onclick="Button1_Click" /> 
     </div> 
    </form> 
</body> 
</html> 
+0

Вы только что создали текстовое поле, вы не установили никакого значения для его свойства Text, поэтому вы получаете пустую строку. –

+0

Я ввожу значения для текстового поля, а затем нажмите кнопку, он должен получить текст, который я набрал – Dvirski

+0

@apros дал вам правильное объяснение, но если вам не нужны данные после того, как страница будет отправлена ​​на сервер, вы можете просто введите значение клиентской части текстового поля. Поэтому вы должны изменить свой код на основе того, что вам нужно делать дальше с вашими данными. –

ответ

0

вы должны понимать, что вы заново создать таблицу на каждый пост на сервер. Таким образом, вы не можете полагаться на данные из своей динамической таблицы, потому что они будут потеряны после каждой публикации. Мое предложение состоит в том, чтобы сохранить это значение в режиме постоянного ввода с типом «скрытым». Затем в событии нажатия кнопки просто получите это значение и назначьте его в текстовое поле.

+0

Я понимаю. это хорошая идея! и как насчет добавления события onchange в текстовое поле и хранения строки в переменной? это будет работать? :] – Dvirski

+0

По-моему нет. Просто переменное значение будет жить только во время одного сообщения на сервер. Таким образом, в качестве варианта вы должны посмотреть на другие возможности на стороне сервера или клиента для хранения данных перекрестных сообщений, таких как файлы cookie, строка запроса, ViewState, Session, Cache и т. Д. – apros

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