6

SqlDataSource にデータバインドされたリピーターがあります

    <asp:Repeater runat="server" ID="Repeater" DataSourceID="SqlDataSource">
        <ItemTemplate>
            <asp:HiddenField runat="server" Value='<%# Eval("Code") %>' ID="Code" />
            <asp:TextBox ID="NumberNeeded" runat="server" Text='<%# Eval("Needed") %>' /><br />
        </ItemTemplate>
    </asp:Repeater>
    <asp:Button runat="server" ID="submit" Text="submit" OnClick="submit_Click" />
    <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="rtvFiltered" SelectCommandType="StoredProcedure">
        <SelectParameters>
        </SelectParameters>
    </asp:SqlDataSource>

リピーターを反復処理して、submit_Click の NumberNeeded の値を取得したい

protected void submit_Click(object sender, EventArgs e)
{
    this.Repeater.DataBind(); //comment this guy and this.Repeater.Items has no items
    foreach (RepeaterItem item in this.Repeater.Items)
    {
        String code = ((HiddenField)item.FindControl("JournalCode")).Value;
        // below fails because "NumberNeeded" control doesn't have the Text input by the user.
        int numNeeded = Int32.Parse(((TextBox)item.FindControl("NumberNeeded")).Text);

        // Doing other stuff with numNeeded
    }
}

リピーターはそのアイテムをページに完全に表示しますが、送信ボタンをクリックすると、 this.Repeater.Items は空です (そのメソッドで this.Repeater.DataBind() を呼び出さない限り)。

!Page.IsPostBack チェックの内外で Page_Load と Page_Init の Repeater を明示的にデータ バインドしようとしましたが、毎回、Items または Text 値を取得しませんでした。

マスターページのないページで、過去にほぼ同じ設定を行ったことがあります。また、Page_Init または Page_Load で true に設定しても、submit_Click メソッドで this.Master.EnableViewState が false であることにも気付きました。this.EnableViewState は true です。

4

2 に答える 2

1

マスター ページの EnableViewState 設定でした。

マスター ページの Page_Load メソッドで、 this.EnableViewState が false に設定されていました。それを Page.EnableViewState に変更すると、すべてが機能しました。

this.EnableViewState = Page.EnableViewState; // add to Master page Page_Load method

する

于 2013-05-20T17:58:08.697 に答える