ASP.NET / Benutzersteuerelement ViewState und verlieren die Eigenschaft Werte

dies ist über ASP.NET ViewState, Benutzersteuerelemente und verlieren die Werte von meinen Eigenschaften. Es ist eine klassische Frage, die durch weiß, ich weiß, und obwohl ich habe gesucht hier und bei Google nach einer Lösung für dieses problem, ich habe nicht gelungen. Im Gegenteil, je mehr ich Teste verschiedene Dinge, die weniger verstehe ich, wie es scheint.

Oben auf der ich bin mit ext.net und Ihre sogenannte DirectMethod ist, aber ich denke, dass hat viel zu tun mit diesem problem. Es gibt zahlreiche Fragen, die ich habe und ich hoffe, dass dieser text wird gut lesbar und verständlich =)

Die UserControl -

Ich habe ein UserControl, Kunden.ascx enthält einige Eigenschaften. Die "meisten" wichtig ist *_CustomerId*. Die _CustomerId ist im code-behind, in ext.net's "DirectMethod" wie folgt aus (code unten aus der Seite der Kunden.aspx):

    [DirectMethod]
    public void SetCustomer()
    {
        RowSelectionModel sm = GridPanel2.SelectionModel.Primary as RowSelectionModel;

        if (sm.SelectedRow != null)
        {
            uint customerId = uint.Parse(sm.SelectedRow.RecordID);
            customer_modify._CustomerId = customerId;
        }
    }

"Customer_modify" ist die Instanz des UserControl im Sinne der Kunden.aspx (eine Seite, nicht ein UserControl):

<asp:Content ID="Content2" ContentPlaceHolderID="CPH_center" runat="server">
    <CP:Customer ID="customer_modify" runat="server" _IsCreateMode="false" ViewStateMode="Enabled" />   
</asp:Content>

In dieser Seite, die Kunden.aspx, ich habe ext.net GridPanel, dass die Listen der Kunden und wenn ich auf die Zeilen in der GridPanel die (Direkte Methode)SetCustomer ausgeführt wird.

Wie Sie sehen können, in der SetCustomer-Methode, die Eigenschaft "_CustomerId" wird aktualisiert und mit einem "uint", also werfen wir einen Blick auf die Eigenschaft in der UserControl:

    public uint _CustomerId 
    { 
        get
        {
            object o = ViewState["_CustomerId"];
            if (o == null)
                return 0;
            return (uint)o;
        }
        set
        {
            object o = ViewState["_CustomerId"];
            ViewState["_CustomerId"] = value;
            SetCustomer();
        }
    }

Wie Sie sehen können, ich bin mit dem ViewState-thingie, und es war meine Hoffnung, dass der Staat, dh der Wert der Eigenschaften erinnern würde. Sie sind es nicht.

Wenn ich auf eine Zeile in der GridPanel das erste mal ich sehen kann (von Bruch), dass der ViewState["_CustomerId"] == null, das ist in Ordnung. Ich sehe danach, dass die Set-für _CustomerId ausgeführt wird und dass der ViewState["_CustomerId"] zugeordnet, die Datensatz-id (uint).

Ich jetzt auf eine andere Zeile in der GridPanel und die SetCustomer-Methode erneut ausgeführt wird. Ich breche in den setter für _CustomerId und werfen Sie einen Blick auf das, was der ViewState["_CustomerId"] ist VOR der Zuweisung. Es 0 ist, aber ich erwarte, dass er den Wert aus der vorherigen Zeile geklickt.

Warum ist es 0? Was bin ich?

Auch:

Eigentlich habe ich zwei von dort Benutzersteuerelemente auf der Seite, die andere mit dem Namen "customer_create":

<ext:Window 
        ID="Window_CreateNewCustomer" 
        runat="server" 
        Icon="New"
        Title="Skapa ny kund" 
        Hidden="true"
        Width="480"
        Height="370"
        Modal="true">

        <Content>
            <CP:Customer ID="customer_create" runat="server" Title="Skapa ny kund" _IsCreateMode="true" />
        </Content>
</ext:Window>

Was stört mich eine Menge, ist, dass jeder und jedes mal, wenn ich auf eine Zeile in der GridPanel die Page_Load-in der UserControl - zweimal ausgeführt, auch wenn ich nur die Aktualisierung einer von Ihnen in der SetCustomer()-Methode.

Warum ist das so?

Irgendwelche Tipps, Ideen und Hilfe würde sehr geschätzt werden.

InformationsquelleAutor Ted | 2011-03-29

Schreibe einen Kommentar