2009-04-02 7 views
0

私は、formviewコントロールによってトリガされた部分的なポストバックの後に、formview editボタンの条件付き表示に問題があります。Formviewと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> 

ボタン条件付きでページロードイベントでユーザーprivilagesに基づいて表示されます:私はこのようなItemTemplateにに定義されて編集ボタンを持って

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

私がいる問題はとしてということですフォームビューコントロールはUpdatePanelにあり、コントロールが読み取り専用モードに戻ったときに部分的なポストバックがページロードイベントをトリガーしないため、編集ボタンが表示されません。この部分的なポストバックを可能にするために、どのようなイベントを使用する必要がありますか?

編集:ページをデバッグした後、部分的なポストバックの後、ページは実際にpage_loadイベントに遭遇しますが、formview.currentmode = edit:|

私は成功していないModeChangedイベントの使用を試みました。答えは、フォームビューコントロールを使用しないだけですか?あなたはイベントハンドラをItemDataBound でコードを置く場合...

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:

感謝:)

答えて

0

私はそのための最高の場所は、このようなFormView_ModeChangingイベントであることだと思いますそれはうまくいくはずです。これは、FormViewにバインドされたオブジェクトが存在するまで、InsertTemplateが存在しないという事実と関係しています。

+0

確かに正しいアプローチのように思えますが、残念ながら、ランタイムはオブジェクト参照がボタンを参照してインスタンスに設定されないようにします。 –

0

あなたはあなたのコードがうまく動作するはず

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

に包まれ、ボタンの表示ロジックを持っていない限り。デバッガを起動し、あなたのIF文にブレークポイントを置いて、fvGenericDetails.CurrentModeは

0

人に評価さか見て、この意志は助けかもしれないが、事前レンダリングまたはinitページEVNTにFormViewコントロールのビューを変更しようとすることでしょう