在gridview内部的Asp.net按钮内部工作不起作用

时间:2011-09-13 18:54:33

标签: c# asp.net gridview updatepanel user-controls

我需要显示客户列表,但会根据参数以不同方式显示它们。

要做到这一点,我有一个gridvew,里面有一个用户控件。该控件具有基于类型的“if”。

我的问题:

  1. 如果我在控件内添加一个按钮,按下它时会出现按钮验证错误。

  2. 如果我禁用验证错误(enableEventValidation =“false”),我可以使用按钮命令,但是我无法使用完整回发或更新面板更改控件上的值。

    <asp:GridView ID="gvClients" runat="server" AutoGenerateColumns="False" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <xxx:ClientListGridItem ID="ClientListItem1" runat="server" Client='<%# ((Client) Container.DataItem) %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    
  3. ClientListGridItem.ascx:

    <% if (Client.Style >= 100)
    {
       %>
     <div class="ClientListItem1">
    ...
    <% 
     }
    else
    {
        %>
     <div class="ClientListItem2">
     <asp:Button ID="Button2" runat="server" onclick="Button1_Click" Text="Button"  />
    ...
    <% 
     }
        %>
    

    我确信有更漂亮,更面向对象的方式来做到这一点......

1 个答案:

答案 0 :(得分:0)

将ClientListGridItem.ascx更改为:

<asp:Panel id="Div1" CssClass="ClientListItem1" runat="server">
...
</asp:Panel>
<asp:Panel id="Div2" CssClass="ClientListItem2"  runat="server">
 <asp:Button ID="Button2" runat="server" onclick="Button1_Click" CausesValidation="false" Text="Button"  />
..
</asp:Panel>
<script runat="server">
   override void OnDataBinding(EventArgs e) {
     Div1.Visible = Client.Style >= 100;
     Div2.Visible = ! Div1.Visible;
   }
</script>

应该有用。