[英]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>
不幸的是,你不能那样做。 如果GridView
在UpdatePanel
之外,则不是这样。 您的选择是:
UpdatePanel
并使用完整的回发 UpdatePanel
添加PostbackTrigger
并将CheckboxList
指定为triger元素...这与上面类似...它将始终导致完整的回发 GridView
放在UpdatePanel
,一切将在异步回发中完成 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.