2009-04-02 4 views
0

Ich habe ein Problem mit der bedingten Anzeige der Formview-Bearbeitungsschaltfläche nach einem teilweisen Postback ausgelöst durch das Steuerelement Formview. Ich habe eine Schaltfläche Bearbeiten in der ItemTemplate wie folgt definiert:Formview und MS-Ajax UpdatePanel

<asp:FormView ID="fvGenericDetails" runat="server"> 
    <ItemTemplate> 
     <asp:Button ID="btnEditGenericDetails" runat="server" Visible="false" CausesValidation="False" CssClass="prepend-top" CommandName="Edit" Text="Edit Generic Details" /> 
</ItemTemplate> 

Die Schaltfläche bedingt auf Benutzer privilages in dem Seitenladeereignis angezeigt basiert:

If CurrentUser.HasAdminStatus and fvGenericDetails.CurrentMode = FormViewMode.ReadOnly Then 
    Dim btnEditGenericDetails As Button = CType(Me.fvGenericDetails.FindControl("btnEditGenericDetails"), Button) 
    btnEditGenericDetails.Visible = True 
End If 

Das Problem, das ich habe, ist, dass als Das formview-Steuerelement befindet sich in einem UpdatePanel, das partielle Postback löst das Ereignis zum Laden der Seite nicht aus, wenn das Steuerelement in den schreibgeschützten Modus zurückkehrt, und der Bearbeitungsschaltfläche wird nicht angezeigt. Welches Ereignis sollte ich für dieses partielle Postback verwenden?

Edit: Nach dem Debuggen der Seite, nach dem teilweisen Postback, die Seite tatsächlich das page_load -Ereignis, aber die formview.currentmode = bearbeiten: |

Ich habe versucht, das ModeChanged-Ereignis ohne Erfolg zu verwenden. Ist die Antwort einfach, das formview-Steuerelement nicht zu verwenden?

Thanks :)

Antwort

0

Ich denke, der beste Ort für das am FormView_ModeChanging Fall so sein würde:

Protected Sub FormView1_ItemDataBound(ByVal sender As Object, ByVal e As EventArgs) Handles FormView1.ItemDataBound 
     If e.NewMode = FormViewMode.ReadOnly Then 
      If CurrentUser.HasAdminStatus Then 
       Dim btnEditGenericDetails As Button = CType(Me.fvGenericDetails.FindControl("btnEditGenericDetails"), Button) 
       btnEditGenericDetails.Visible = True 

      End If 
     End If 
End Sub 

Ok ... Wenn Sie Ihren Code setzen in der Ereignishandler ItemDataBound dann sollte es funktionieren. Es hat etwas damit zu tun, dass InsertTemplate nicht existiert, bis ein Objekt an das FormView gebunden ist.

+0

zu ändern, das wäre sicherlich scheint der richtige Ansatz, aber leider die Laufzeit gibt Objektreferenz nicht auf eine Instanz eines Objekts festgelegt, Verweis auf die Schaltfläche. –

0

, wenn Sie Ihre -Tastenanzeige Logik in

if(!IsPostBack){} //don't know what the VB equivalent is 

Code eingewickelt haben sollte gut funktionieren. starten Sie den Debugger und einen Haltepunkt auf dem IF-Anweisung setzen, und sieht, was fvGenericDetails.CurrentMode zu

0

Mann auswertet, kann dieser Wille hilft, aber versuchen, den Formview Blick auf Prerender oder Init Seite evnt