У меня довольно простая форма:
<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;
}
}