Formview和MS-Ajax UpdatePanel

时间:2009-04-02 23:29:36

标签: asp.net asp.net-ajax webforms

在formview控件触发部分回发后,我遇到了formview edit按钮的条件显示问题。我在ItemTemplate中定义了一个编辑按钮,如下所示:

<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>

根据页面加载事件中的用户权限有条件地显示该按钮:

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

我遇到的问题是,由于formview控件位于UpdatePanel中,当控件返回到只读模式时,部分回发不会触发页面加载事件,并且编辑按钮不可见。我应该使用什么事件来允许这种部分回发?

编辑:调试页面后,在部分回发后,页面确实命中了page_load事件,但是formview.currentmode = edit:|

我尝试过使用ModeChanged事件但没有成功。答案就是不使用formview控件吗?

谢谢:)

3 个答案:

答案 0 :(得分:0)

我认为最好的地方是FormView_ModeChanging事件,如下所示:

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

好的...如果您将代码放在 ItemDataBound 事件处理程序中,那么它应该可以正常工作。它与InsertTemplate在存在绑定到FormView的对象之前不存在的事实有关。

答案 1 :(得分:0)

除非你的按钮显示逻辑包含在

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

你的代码应该可以正常工作。启动调试器并在IF语句上放置一个断点,看看fvGenericDetails.CurrentMode的计算结果为

答案 2 :(得分:0)

man,可能会有所帮助,但尝试更改Prerender或Init页面上的formview视图