2012-11-20 37 views
0

我在用戶控件中有一箇中繼器控件。中繼器控件有一個標籤和一個文本框。點擊一個按鈕後,中繼器控制中會添加一個新行。如果我添加一行並在文本框中輸入一些值,然後再次在中繼器控件中添加一行,則輸入到第一行文本框中的值將丟失。中繼器控制回發後文本框丟失

任何人都可以幫助我如何在回發後保留文本框的值。

+5

請提供代碼。 – davenewza

回答

4

您正在失去它,因爲您沒有設置文本框的值的代碼中包含If If IsPostBack。

因此,每次執行該頁面時,該值都將被重置。將圍繞ispostback設置值的代碼封裝起來,新值不會被覆蓋。

如果(Page.IsPostBack!){//設定值}

0
+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

感謝您的建議。我已經爲上述問題發佈了另一個答案。 –

+0

您的其他答案要好得多,但您可以通過單擊編輯鏈接編輯帶有附加內容的答案,而不是發佈新答案。 –

-1

我曾嘗試自己和找到了解決辦法:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 

    namespace RepeaterTest 
    { 
     public class Car 
     { 
      private string _year; 
      private string _make; 
      private string _model; 

      public string Year 
      { 
       get 
       { 
        return _year; 
       } 
       set 
       { 
        _year = value; 
       } 
      } 

      public string Make { 
       get { return _make; } 
       set { _make=value;} 
      } 

      public string Model 
      { 
       get { return _model; } 
       set { _model = value; } 
      } 

      public Car(string year,string make,string model){ 
       _year = year; 
       _make = make; 
       _model = model; 
     } 

      public Car(){ 
     } 

     } 
    } 


    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Collections; 

    namespace RepeaterTest 
    { 
     public class Cars:CollectionBase 
     { 

      public int Add(Car car) { 
       return List.Add(car); 
      } 

     } 
    } 

    in code behind: 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 

    namespace RepeaterTest 
    { 
     public partial class WebForm1 : System.Web.UI.Page 
     { 
      protected void Page_Load(object sender, EventArgs e) 
      { 
       if (!Page.IsPostBack) { 
        Cars cars = new Cars(); 
        Car c1 = new Car("2011", "Marcedez", "Marcedez"); 
        Car c2 = new Car("2012", "BMW", "135i"); 
        cars.Add(c1); 
        cars.Add(c2); 
        Repeater1.DataSource = cars; 
        Repeater1.DataBind(); 
       } 
      } 

      protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
      { 
       if (e.CommandName == "Add") { 
        //Car carLastEntered = new Car(); 
        Cars cars = new Cars(); 
        foreach (RepeaterItem item in Repeater1.Items) { 
         Car car = new Car(); 
         car.Year = ((TextBox)(item.FindControl("txtYear"))).Text; 
         car.Make = ((TextBox)(item.FindControl("txtMake"))).Text; 
         car.Model = ((TextBox)(item.FindControl("txtModel"))).Text; 
         cars.Add(car); 
         //carLastEntered = car; 

        } 

        //cars.Add(carLastEntered); 
        Repeater1.DataSource = cars; 
        Repeater1.DataBind(); 

       } 
      } 
     } 
    } 

    in aspx: 
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="RepeaterTest.WebForm1" %> 

    <!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> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
     <div> 
      <asp:Repeater ID="Repeater1" runat="server" 
       onitemcommand="Repeater1_ItemCommand"> 
      <HeaderTemplate> 
      <table cellpadding="0" cellspacing="5"> 
      <tr style="padding-top: 5px;"> 
       <td colspan="6"> 
        <asp:Label ID="lblInstructions" runat="server" Text="Add your cars here:" /> 
       </td> 
      </tr> 
      <tr runat="server" id="trHeader" style="font-weight: bold;"> 
       <td>Year</td> 
       <td>Make</td> 
       <td>Model</td> 
       <td></td> 
       <td></td> 
       <td></td> 
      </tr>   
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <td><asp:TextBox ID="txtYear" runat="server" Width="65" 
        Text='<%#DataBinder.Eval(Container.DataItem, "Year")%>' /></td> 
       <td><asp:TextBox ID="txtMake" runat="server" Width="70"    
        Text='<%#DataBinder.Eval(Container.DataItem, "Make")%>' /></td> 
       <td><asp:TextBox ID="txtModel" runat="server" Width="70" 
        Text='<%#DataBinder.Eval(Container.DataItem, "Model")%>' /></td> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      <tr style="padding-top: 5px;"> 
       <td colspan="6"> 
        <asp:Button ID="btnAdd" runat="server" 
        Text="Add Car" CommandName="Add" /> 
       </td> 
      </tr> 
      </table> 
     </FooterTemplate> 
      </asp:Repeater> 
     </div> 
     </form> 
    </body> 
    </html> 

希望這有助於。謝謝。

相關問題