2011-07-24 9 views
4

Page_Loadに、私はEF4を使用してリピーターをバインドしています。リピータには、最初に入力されたテキストボックスがいくつか含まれていますが、ユーザーは編集できます。これらのテキストボックスを後のポストバックでどのように読むことができますか?リピーターからTextBox値を取得する

page.aspx(抜粋):

<asp:Repeater ID="repOrders" runat="server"> 
    <ItemTemplate> 
    <p> 
     <%# Eval("Id") %> - 
     <asp:TextBox ID="txtName" Text='<%# Eval("Name") %>' runat="server"> 
     </asp:TextBox> 
    </p> 
    </ItemTemplate> 
</asp:Repeater> 

page.aspx.cs(抜粋):私はlnkCheckをクリックしたときに

protected void Page_Load(object sender, EventArgs e) { 
    using (var ctx = new Ctx()) { 
    var ds = ctx.Orders; 
    repOrders.DataSource = ds; 
    repOrders.DataBind(); 
    } 
} 

protected void lnkCheck_Click(object sender, EventArgs e) { 
    Response.Write(((TextBox)repOrders.Items[0].FindControl("txtName")).Text); 
} 

問題は、ある、リピータ再データベースから最初にポピュレートするので、テキストボックスへの変更は失われます。

if (IsPostBack) return;Page_Loadに入れると、リピータは空です。

どうすればこの問題を回避できますか?

答えて

1

ポストバックでない場合にのみリピータにデータを入力します。リピーターに対してviewstateが有効になっている限り、データは永続化されます。

protected void Page_Load(object sender, EventArgs e) { 

    if(!IsPostBack) 
    { 
    using (var ctx = new Ctx()) { 
     var ds = ctx.Orders; 
     repOrders.DataSource = ds; 
     repOrders.DataBind(); 
     } 
    } 

    } 

どのようにあなたがリピーターからのテキスト値を読むために「後でポストバック」を上げていますか?通常は、リピータからitemコマンドを呼び出してから、findコントロールを使用してアイテムテンプレート内のテキストボックスの値を取得します。

+0

いいえ、repOrders.Itemsは空です。 ViewStateは動作していないようです - デフォルトではオンになっています。何か案は? (そして、私は 'Save all'機能を使って個々のリピータアイテムから持ち上げないようにしています) – James

+1

なぜそれが '空'になるのかわかりません。おそらく他の容疑者がいます。完全なHTML /コードを投稿することはできますか? – FiveTools

+1

あなたは大丈夫です。さらに調べると、マスターページにPage.DataBind()が見つかりました。私を正しい方向に向けてくれてありがとう。 – James

関連する問題