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:&nbsp;<asp:Label ID="lblName" runat="server" Text='<%# Bind("FirstName") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Surname:&nbsp;<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>
Konnte Sie nach dem code, wo/wie fügen Sie die 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

Schreibe einen Kommentar