2009-04-02 5 views
0

J'ai un problème avec l'affichage conditionnel du bouton d'édition de formulaire après une publication partielle déclenchée par le contrôle formview. J'ai un bouton d'édition défini dans le ItemTemplate comme ceci:Formview et 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> 

Le bouton est conditionnellement affichée sur la base privilages utilisateur en cas de chargement de la page:

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

Le problème que je vais avoir est que le contrôle formview est dans un UpdatePanel, la publication partielle ne déclenche pas l'événement de chargement de page lorsque le contrôle revient en mode lecture seule et le bouton d'édition n'est pas rendu visible. Quel événement dois-je utiliser pour autoriser cette publication partielle? Edit: Après avoir débogué la page, après la publication partielle, la page a effectivement atteint l'événement page_load mais le formulaireview.currentmode = edit: |

J'ai essayé d'utiliser l'événement ModeChanged sans succès. La réponse est-elle simplement de ne pas utiliser le contrôle formview?

Merci :)

Répondre

0

Je pense que le meilleur endroit pour ce serait à l'événement FormView_ModeChanging comme ceci:

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 ... Si vous mettez votre code dans le ItemDataBound gestionnaire d'événements alors ça devrait marcher. Cela a quelque chose à voir avec le fait que InsertTemplate n'existe pas jusqu'à ce qu'un objet soit lié à FormView.

+0

Ce serait semble certainement être la bonne approche, mais malheureusement, le runtime renvoie la référence d'objet non définie à une instance d'un objet, référençant le bouton. –

0

sauf si vous avez votre bouton logique d'affichage enveloppé dans

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

votre code devrait fonctionner très bien. lancer le débogueur et mettre un point d'arrêt sur votre instruction IF et voir ce que fvGenericDetails.CurrentMode évalue à

0
homme

, peut-être cette volonté aide, mais essayer de changer la vue formview à la page prérendu ou Init evnt