繁体   English   中英

asp.net(C#)中带有UpdatePanel的GridView和CheckBoxList

[英]GridView and CheckBoxList with UpdatePanel in asp.net (C#)

我在UpdatePanel中有一个CheckBoxList,该事件具有onselectedindex更改事件,我必须通过从数据库中获取数据来更新我的gridview。 事件执行得很好,但是GridView不显示更新的数据可能是因为GridView不在updatepanel中。

实际上,我的问题是触发Checkboxlist的onselectedindexchanged后数据未在gridview中更新,并且我无法将gridview放入updatepanel(对我来说是强制性的)内。

onselectedindexchanged事件工作正常,我已经将其检出。 那么我该如何更新我的gridview数据。

这是我的代码

<asp:UpdatePanel ID="MonthUpdatePanel" runat="server">
    <ContentTemplate>
       <asp:CheckBoxList ID="MonthCheckBoxList" runat="server" AutoPostBack="True" 
         onselectedindexchanged="MonthCheckBoxList_SelectedIndexChanged" 
       Width="195px"  onclick="updateviewmore()" >
       <asp:ListItem Value="1">1 Month</asp:ListItem>
       <asp:ListItem Value="2">2 Month</asp:ListItem>
       <asp:ListItem Value="6">6 Month</asp:ListItem>
       <asp:ListItem Value="12">1 Year</asp:ListItem>
       </asp:CheckBoxList>
   </ContentTemplate>
 </asp:UpdatePanel>

<div>
 <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false"  Width="100%"
     GridLines="None" onrowdatabound="GridView2_RowDataBound" 
     ShowHeader="False">
      <Columns>
          <asp:TemplateField>
            <ItemTemplate>
                <div class="pad5">

                 <asp:Label ID="BookImageName" Text='<% #"../BookImages/"+ Eval("BookImage") %>'           CssClass="BookImage" runat="server" Height="180px" Width="135px" />

            </div>

       </ItemTemplate>
     </asp:TemplateField>
    </Columns>
 </asp:GridView>
</div>

不幸的是,你不能那样做。 如果GridViewUpdatePanel之外,则不是这样。 您的选择是:

  1. 删除UpdatePanel并使用完整的回发
  2. UpdatePanel添加PostbackTrigger并将CheckboxList指定为triger元素...这与上面类似...它将始终导致完整的回发
  3. GridView放在UpdatePanel ,一切将在异步回发中完成
  4. CheckboxList UpdatePanel之外,然后将GridView放在UpdatePanel内,并为CheckboxList添加一个AsyncPostbackTrigger ,以便在选中和项目时UpdatePanel可以异步更新。

最重要的是,如果要异步重新绑定GridView则必须将其移到UpdatePanel内,否则必须使用完整的回发方法

核心解决方案

您仍然可以借助jQuery插件, UserControl和可以创建的http处理程序手动创建所有内容,以提供必要的html。 也就是说,拦截来自客户端的html请求,通过一些参数向处理程序发出异步请求,以使处理程序知道如何告诉UserControl如何绑定GridView ... ...当然, GridView将位于UserControl内部

处理程序可以使用HttpServerUtility实例的Execute方法UserControl的输出写入响应,该方法在当前HttpContext可用。 例如...

public class YourHandler: IHttpHandler {
    public void ProcessRequest(HttpContext ctx){
        StringWriter writer = new StringWriter();
        ctx.Server.Execute("~/UserControl.ascx", output, false);
        ctx.Response.Write(writer);
    } 
}

这种方法有效地工作,就好像UserControl在正常请求期间正在通过所有ASP.NET管道周期一样,并且它的上下文将与http处理程序的上下文完全相同...因此,如果您使用的是内置asp。网络成员资格功能确保使用通用处理程序(.ashx),该处理程序本身即可插入ASP.NET管道,而无需您付出额外的努力

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM