0

私はかなり単純なフォームを持っています:

<asp:FormView>
    <EditItemTemplate>
        <asp:LoginView>
            <RoleGroups>
                <asp:RoleGroup roles="Blah">
                    <ContentTemplate>
                        <!-- Databound Controls using Bind/Eval -->
                    </ContentTemplate>
                </asp:RoleGroup>
            </RoleGroups>
        </asp:LoginView>

        <!-- Databound Controls -->
    </EditItemTemplate>
</asp:FormView>

<asp:LinqDataSource OnUpdating="MyDataSource_Updating" />

LinqDataSource OnUpdating イベントを処理し、いくつかの M:N フィールドを処理する作業を行います。それはすべてうまくいきます。

ただし、更新が完了すると (e.Cancel = true を呼び出します)、LoginView コントロールはその子をデータバインドしません... したがって、それらはすべて空白になります。FormView のビューステートは、LoginView の外側にある残りのすべてのコントロールが問題なく表示されるため、問題ありません。FormView_DataBound イベントも処理し、Trace は FormView がポストバックでデータバインドされていることを示します。

では、LoginView が ViewState を保持していない/データバインドされていないのはなぜですか? フローを示すサンプル コード スニペットを次に示します。

protected void MyDataSource_Updating(object s, LinqDataSourceUpdateEventArgs e)
{
    try 
    {
        Controller.DoSomething(newData);
        // attempts to databind again here fail
        // frmView.DataBind();
        // MyDataSource.DataBind();
        // LoginView.DataBind();
    }
    catch { // blah }
    finally 
    { 
        e.Cancel = true; 
    }
}
4

2 に答える 2

2

私は、すべてを自分でデータバインドし、LoginView を廃止する昔ながらの方法に戻すことで、これを修正しました。

于 2010-04-28T19:45:48.027 に答える
1

わかりました、現時点で助けが必要かどうかはわかりませんが、キャッチする必要があるコンテナはフォームアイテムです。この場合、これを行うことはできません

<%# DataBinder.Eval(((FormItem)Container.Parent).DataItem,"YOUR FIELD") %>

私の英語でごめんなさい。

さよなら。

于 2011-06-09T03:57:36.247 に答える