私はかなり単純なフォームを持っています:
<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;
}
}