【发布时间】:2015-05-20 14:38:07
【问题描述】:
<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="TasksUpdatePanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlDropDown" runat="server" ClientIDMode="Static" CssClass="pnlDropDown">
<!-- TASK NAME -->
<asp:DropDownList ID="ddlTaskName" CssClass="chosen-select" DataSourceID="dsPopulateTaskName" AutoPostBack="true" DataValueField="Task Name" runat="server" Width="100%" Font-Size="11px" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlTaskName_onSelectIndexChanged">
<asp:ListItem Text="All" Value="%"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
<asp:GridView ShowHeaderWhenEmpty="false" AlternatingRowStyle-BackColor="#EBE9E9" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="You currently have no tasks assigned to you" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated">
<Columns>
<asp:TemplateField HeaderStyle-Width="2%">
<ItemTemplate>
<asp:ImageButton ImageUrl="~/cies.png" runat="server" ID="btnShowDepend" OnCommand="btnShowDepend_Command" CommandName="TaskDepend" CommandArgument='<%#Eval("TestIt") %>' ToolTip="Click to view Dependencies" />
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField HeaderStyle-Width="16%" Target="_self" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Detail" SortExpression="Task Name" ItemStyle-CssClass="taskTableColumn" />
<asp:BoundField HeaderStyle-Width="10%" DataField="Workgroup" HeaderText="Workgroup" SortExpression="Workgroup" ItemStyle-CssClass="taskTableColumn" />
<asp:BoundField HeaderStyle-Width="7%" DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-CssClass="taskTableColumn" />
</Columns>
</asp:GridView>
</ContentTemplate>
<%--<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlTaskName" EventName="onSelectIndexChanged" />
</Triggers>--%>
</asp:UpdatePanel>
每当执行ddlTaskName_onSelectIndexChanged 函数时,都会进行整页回发,而不仅仅是更新UpdatePanel
ddlTaskName_onSelectIndexChanged函数:
protected void ddlTaskName_onSelectIndexChanged(object sender, EventArgs e)
{
PullData(ViewState["sortExp"].ToString(), ViewState["sortOrder"].ToString(), false); //calls a function to update the GridView
}
使用上面的代码,每当ddlTaskName 中的索引发生更改时,页面都会执行完整回发,而不仅仅是部分回发(仅更新 GridView)
我可以添加/修改哪些代码以确保不执行完整的回发,并且仅在索引更改时更新 GridView。
想...我需要将它们添加到两个单独的 UpdatePanel 中吗?
如果我取消注释 triggers,我会收到以下错误:A control with ID 'ddlTaskName' could not be found for the trigger in UpdatePanel 'TasksUpdatePanel'.
我将下拉列表附加到 Gridview,如下所示:
是不是因为这个:
protected void yourTasksGV_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
GridView hGrid = (GridView)sender;
GridViewRow gvrRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);
TableHeaderCell tcCellTask = new TableHeaderCell();
tcCellTask.Controls.Add(ddlTaskName);
gvrRow.Cells.Add(tcCellTask);
yourTasksGV.Controls[0].Controls.AddAt(0, gvrRow);
}
}
【问题讨论】:
-
您是否尝试过将 Gridview 包装在另一个 UpdatePanel 中并将当前触发器移入其中?见这里:asp.net/web-forms/overview/older-versions-getting-started/…
-
你的意思是,有两个独立的更新面板?一个用于下拉菜单,一个用于 GridView?但是如果它们合二为一,那不应该是一样的吗?我只是对为什么它存在时找不到 ID 感到惊讶和困惑。
-
是的,2 个更新面板。 1 轮下拉和 1 轮 Gridview。然后将触发器放在与下拉列表相关的 Gridview 更新面板中。
-
您是否尝试过将 Gridview 嵌套在当前 1 中它自己的更新面板中,然后将 ddl 设置为 Gridview 更新面板中的触发器?
-
尝试将外部更新面板上的 ChildrenAsTriggers 属性设置为 false,将内部更新面板上的 ChildrenAsTriggers 属性设置为 true。
标签: c# asp.net drop-down-menu updatepanel jquery-chosen