我正在嘗試創建一個簡單的pager用戶控件,該控件將用於ASP.NET中繼器的頁腳中。UserControl在回發後丟失ViewState
每次用戶點擊下一步,我想將PageCounter增加10並將值保存在ViewState中。 它的工作原理我第一次點擊lbNext但後來它不斷變得重置爲10和ViewState["PageCounter"]
爲空
我試過裝飾我的[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>
後面的代碼:
編輯:
這裏就是我的尋呼機用戶控件添加到中繼器的代碼:
<%@ 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>
你可以發佈代碼的地方/如何添加到傳呼機/頁面的「傳呼機」? –
當然,請參閱編輯 –
當我用ASP.NET開發時,我不記得使用'PersistenceMode'。從一點谷歌搜索,它似乎是用來讓控制自動保持其數據沒有視圖狀態(或利用幕後的視圖狀態/會話狀態)。可能舊的值被自動保留,並且當ASP.NET在回發時重建控件時,用'0'覆蓋Viewstate的值。如果你拋棄了'PersistenceMode'屬性會發生什麼?此外,請嘗試運行調試器,看看'setter'是否正在使用舊數據進行觸發,而不是您期望的或者失靈。 –