ASP.NETリピーターのフッターで使用される単純なページャーユーザーコントロールを作成しようとしています。
ユーザーが[次へ]をクリックするたびに、PageCounterを10ずつ増やし、その値をViewStateに保存したいと思います。初めてlbNextをクリックすると機能しますが、その後は10にリセットされ続け、ViewState["PageCounter"]
nullになります。
私は自分の財産を飾ろうとしまし[PersistenceMode(PersistenceMode.Attribute)]
たが、それでも運がありません。値がViewStateに永続化されないのはなぜですか?
ASCX:
<%@ Control Language="C#" EnableViewState="true" AutoEventWireup="true" CodeBehind="Pager.ascx.cs" Inherits="WebApplication6.Pager" %>
<asp:LinkButton ID="lbPrevious" runat="server" OnCommand="SetPage" CommandArgument="Previous">Previous</asp:LinkButton>
<asp:TextBox ID="txtPage" runat="server" EnableViewState="true" Enabled="false"></asp:TextBox>
<asp:LinkButton ID="lbNext" runat="server" OnCommand="SetPage" CommandArgument="Next">Next</asp:LinkButton>
背後にあるコード:
public partial class Pager : System.Web.UI.UserControl
{
[PersistenceMode(PersistenceMode.Attribute)]
public int PageCounter
{
get
{
var counter = ViewState["PageCounter"];
return ((counter == null) ? 0 : (int)counter);
}
set
{
ViewState["PageCounter"] = value;
txtPage.Text = value.ToString();
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
PageCounter = 0;
}
protected void SetPage(object sender, CommandEventArgs e)
{
switch (e.CommandArgument.ToString())
{
case "Previous":
PageCounter -= 10;
break;
case "Next":
PageCounter = PageCounter + 10;
break;
}
}
}
編集:
Pagerユーザーコントロールをリピーターに追加するコードは次のとおりです。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx.cs" Inherits="WebApplication6.Repeater" %>
<%@ Register Src="Pager.ascx" TagName="Pager" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Repeater control</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="booksRepeater" runat="server">
<ItemTemplate>
<table>
<tr>
<td>
Name: <asp:Label ID="lblName" runat="server" Text='<%# Bind("FirstName") %>' />
</td>
</tr>
<tr>
<td>
Surname: <asp:Label ID="lblSurname" runat="server" Text='<%# Bind("LastName") %>' />
</td>
</tr>
</table>
</div>
</ItemTemplate>
<FooterTemplate>
<asp:Pager ID="pager" runat="server" />
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>