在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控件吗?
谢谢:)
答案 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视图