在 UpdatePanel 里有一个 ListView 控件,在模板中使用了 LinkButton,并设置了 CommandName 为 Select。可是,点击 LinkButton 会导致页面全部刷新,而不是局部刷新,该如何处理?这里是代码:
<body>
<form runat="server">
<div>
<asp:ScriptManager runat="server" />
<asp:ObjectDataSource ID="SalesOrderDataSource" runat="server" SelectMethod="GetSalesOrders"
TypeName="SalesOrderDao" EnablePaging="True" SelectCountMethod="GetRowCount" />
<fieldset>
<div>
<asp:TextBox runat="server" />
</div>
</fieldset>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:LinkButton ID="ShowOrHideLinkButton" runat="server" OnClick="OnShowOrHideClicked">LinkButton</asp:LinkButton>
<asp:Panel ID="SalesOrderListPanel" runat="server" Visible="false">
<asp:ListView ID="SalesOrderListView" runat="server" DataKeyNames="Id" DataSourceID="SalesOrderDataSource">
<LayoutTemplate>
<table>
<thead>
<tr>
<th />
<th>ID</th>
<th>Product</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr runat="server" id="itemPlaceholder" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton runat="server" Text="Select" CommandName="Select" />
</td>
<td>
<%#Eval("Id")%>
</td>
<td>
<%#Eval("Product")%>
</td>
<td>
<%#Eval("Quantity")%>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:DataPager ID="SalesOrderDataPager" runat="server" PagedControlID="SalesOrderListView">
<Fields>
<asp:NumericPagerField />
<asp:NextPreviousPagerField />
</Fields>
</asp:DataPager>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ShowOrHideLinkButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="SalesOrderDataPager" EventName="DataBinding" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>public partial class _Default : System.Web.UI.Page
{
protected void OnShowOrHideClicked(object sender, EventArgs e)
{
this.SalesOrderListPanel.Visible = !this.SalesOrderListPanel.Visible;
}
}public class SalesOrderDao
{
public IEnumerable<SalesOrder> GetSalesOrders(int startRowIndex, int maximumRows)
{
for (int i = 0; i < maximumRows; i++)
{
int num = i + startRowIndex + 1; yield return new SalesOrder()
{
Id = num,
Product = string.Format("Product {0}", num),
Quantity = num
};
}
} public int GetRowCount()
{
return 123;
}
}public class SalesOrder
{
public int Id { get; set; }
public string Product { get; set; }
public int Quantity { get; set; }
}
<body>
<form runat="server">
<div>
<asp:ScriptManager runat="server" />
<asp:ObjectDataSource ID="SalesOrderDataSource" runat="server" SelectMethod="GetSalesOrders"
TypeName="SalesOrderDao" EnablePaging="True" SelectCountMethod="GetRowCount" />
<fieldset>
<div>
<asp:TextBox runat="server" />
</div>
</fieldset>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:LinkButton ID="ShowOrHideLinkButton" runat="server" OnClick="OnShowOrHideClicked">LinkButton</asp:LinkButton>
<asp:Panel ID="SalesOrderListPanel" runat="server" Visible="false">
<asp:ListView ID="SalesOrderListView" runat="server" DataKeyNames="Id" DataSourceID="SalesOrderDataSource">
<LayoutTemplate>
<table>
<thead>
<tr>
<th />
<th>ID</th>
<th>Product</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr runat="server" id="itemPlaceholder" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton runat="server" Text="Select" CommandName="Select" />
</td>
<td>
<%#Eval("Id")%>
</td>
<td>
<%#Eval("Product")%>
</td>
<td>
<%#Eval("Quantity")%>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:DataPager ID="SalesOrderDataPager" runat="server" PagedControlID="SalesOrderListView">
<Fields>
<asp:NumericPagerField />
<asp:NextPreviousPagerField />
</Fields>
</asp:DataPager>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ShowOrHideLinkButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="SalesOrderDataPager" EventName="DataBinding" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>public partial class _Default : System.Web.UI.Page
{
protected void OnShowOrHideClicked(object sender, EventArgs e)
{
this.SalesOrderListPanel.Visible = !this.SalesOrderListPanel.Visible;
}
}public class SalesOrderDao
{
public IEnumerable<SalesOrder> GetSalesOrders(int startRowIndex, int maximumRows)
{
for (int i = 0; i < maximumRows; i++)
{
int num = i + startRowIndex + 1; yield return new SalesOrder()
{
Id = num,
Product = string.Format("Product {0}", num),
Quantity = num
};
}
} public int GetRowCount()
{
return 123;
}
}public class SalesOrder
{
public int Id { get; set; }
public string Product { get; set; }
public int Quantity { get; set; }
}
<asp:AsyncPostBackTrigger ControlID="ShowOrHideLinkButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="SalesOrderDataPager" EventName="DataBinding" />
</Triggers>在这加上linkbutton的事件..后台加