2012-12-16 79 views
0

我是asp的啓動者,同時試圖做一些表動態更新,我陷入了一個奇怪的問題:
第一次在頁面加載我從一些數據XML文件並將其添加到我的表。這部分沒有引起任何問題,數據顯示在頁面上。
第二部分是當我嘗試將表格的更新數據寫回文件時,我找回了一個空文件。在調試模式下查看值後,似乎當我得到HtmlTable實例並檢查Row屬性時,只有一行是標題行。無法從asp.net中更新的HtmlTable對象中獲取數據

連接的表聲明:

<table id="users" class="ui-widget ui-widget-content" runat="server">  
<thead> 
<tr class="ui-widget-header ">   
<th>Title</th>      
<th>Link From Ibms</th> 
<th>Dismiss</th>  
</tr> 
</thead> 
</table> 

和閱讀並在服務器上寫功能:

private void readLinkXml() 
    { 
     if (!File.Exists(path))               // no file. 
      return; 

     XmlTextReader reader = new XmlTextReader(path); 
     reader.WhitespaceHandling = WhitespaceHandling.None; 
    // reader.Read(); 

     while (!reader.EOF)                // load loop 
     { 

      if ((reader.Name == "ChannelMap" && !reader.IsStartElement())) 
      { 
       break; 
      } 

      while ((reader.Name != "links" || !reader.IsStartElement())) 
       reader.Read();               // advance to next <links> tag 

      HtmlTableRow row = new HtmlTableRow(); 

      HtmlTableCell title = new HtmlTableCell(); 
      title.InnerHtml = reader.GetAttribute("TITLE");        // get link title. 
      row.Cells.Add(title); 
      HtmlTableCell link = new HtmlTableCell(); 
      link.InnerHtml = reader.GetAttribute("VOD_URL");       // get link url. 
      row.Cells.Add(link); 
      HtmlTableCell buttonCell = new HtmlTableCell(); 
      buttonCell.Attributes.Add("id", "table_button"); 
      row.Cells.Add(buttonCell); 

      users.Rows.Add(row);              // add xml asset as row in link table.       
      reader.Read();                // and now either at <links> tag or </ChannelMap 
     } 


     reader.Close(); 
    } 


    private void writeLinksXml() 
    { 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     settings.IndentChars = " "; 
     settings.NewLineChars = "\r\n"; 
     settings.NewLineHandling = NewLineHandling.Replace; 
     XmlWriter writer = XmlWriter.Create(path, settings); 

     writer.WriteStartDocument(); 
     writer.WriteStartElement("ChannelMap"); 

     bool first = true; 

     foreach (HtmlTableRow row in users.Rows) 
     { 
      if (first) 
      { 
       first = false; 
       continue; 
      } 

      writer.WriteStartElement("links"); 
      writer.WriteAttributeString("TITLE", row.Cells[0].InnerText); 
      writer.WriteAttributeString("VOD_URL", row.Cells[1].InnerText); 
      writer.WriteEndElement(); 
     } 

     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 
     writer.Close(); 
    } 

沒有人知道爲什麼我不能夠找回我剛添加到數據表?

感謝,
摩西

+0

沒人知道這裏可能是什麼問題? – moshe

回答

1

嗯,看來這個問題是爲什麼在ASPNET需要視圖狀態的所有調用。
從你的問題我想你已經在Page_Load()數據綁定,你也可能用過

Page.IsPostBack 

這是做一件好事。

現在,當你做回發時,你需要確保你綁定了相同的控件(不管它是什麼,GridView,DataList什麼都沒有......)。

所以每次回發後再次綁定或把你的數據在ViewState中,如果你想減少與XML文件的調用。

+0

我很抱歉,但我是新來的asp的,所以也許你可以就如何(動態表在我的情況)控件綁定更spisific? – moshe

+0

正如我在我的最後一個答覆中提到的,我的理解是你在Page_Load()動態綁定或生成HTML表格() 毫無疑問,Page_Load()每次都會調用,但是由於您正在更新需要的XML文件再次調用相同的方法來動態生成HTML,確保您上次生成的HTML不在頁面中。否則,它會重複列表中的一些結果。 –

+0

好的,所以當我在每個帖子上加載xml時,xml結果將被接收。問題在於xml僅保存我以前的數據,所以在第一次用戶能夠通過javascript動態更改表格內容後,將數據加載到表格中。有沒有辦法獲得動態添加的額外數據? – moshe

0

確保readLinkXml()發生在你的頁面的Page_Init
否則,當視圖狀態嘗試在PostBack時更新行時 - 它無法找到數據並且無法更改值。

+0

是否僅在第一次請求頁面時才調用Page_Init一次? – moshe

+0

不,page_init被稱爲每次,在Page_Load之前,其視圖狀態解析 – Blachshma