UserControl verliert ViewState nach postback
Ich versuche zu schaffen, eine einfache pager-Benutzer-Steuerung, die verwendet werden, in eine Fußzeile ein ASP.NET repeater.
Jedesmal, wenn der Benutzer klickt auf Weiter würde ich gerne erhöhen Sie den PageCounter von 10 und speichern Sie den Wert im ViewState.
Es funktioniert das erste mal, wenn ich Sie auf lbNext aber danach wird es immer auf 10 zurückgesetzt und ViewState["PageCounter"]
null ist
Habe ich versucht, die Dekoration meiner Eigenschaft mit [PersistenceMode(PersistenceMode.Attribute)]
aber noch kein Glück. Warum ist der Wert nicht beibehalten wird, um 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>
Code hinter:
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;
}
}
}
EDIT:
Hier ist der code, wo ich die Pager-Benutzer-Steuerelement, um die repeater:
<%@ 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>
Pager
im repeater - / - Seite?Sicher finden Sie in der Bearbeiten
Wenn ich verwendet, um zu entwickeln, ASP.NET ich kann mich nicht erinnern mit der
PersistenceMode
. Von ein bisschen googeln, es scheint, wie es verwendet werden, um die Kontrolle bestehen seine Daten automatisch ohne view state (oder nutzt die viewstate - /session-Status hinter den kulissen). Möglicherweise wird der alte Wert wird automatisch beibehalten und überschreiben der Viewstate-Wert mit 0
wenn ASP.NET Umbauten werden die Steuerelemente auf der post zurück. Was passiert, wenn Sie Graben die PersistenceMode
- Attribut? Versuchen Sie auch, dem der debugger ausgeführt wird, und sehen, ob die setter
ist feuern mit alten Daten, als das, was Sie erwarten, oder nicht in Ordnung.Ich habe es ausprobiert-zunächst ohne PersistenceMode, es funktioniert nicht.Der setter ist, ist in Ordnung, das problem ist ViewState wird zurückgesetzt in den getter. Wenn Sie neu erstellen, die Kontrolle, die Sie sehen, von was ich Rede
InformationsquelleAutor Denys Wessels | 2013-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren code nicht zeigen, wenn Ihre Daten an Ihre Repeater ("booksRepeater"). Stellen Sie sicher, Sie binden Ihre Daten in der Zeit.
Es klingt wie das problem: Die Aufrechterhaltung der viewstate einer repeater
Nicht alle Probleme sind groß. 😉 Froh, dass Sie es gefunden!
InformationsquelleAutor Jacco