2009-07-15 16 views
1

Ich versuche hier, ein Modul zu erstellen, das mit einem Webhosting-Warenkorbprozess verknüpft ist.Problem mit Literalen und ViewState

Der erste Schritt sollte ein Textfeld mit einem "Hinzufügen" -Button haben. Diese Schaltfläche überprüft die Verfügbarkeit einer Domäne und fügt sie zu einer Liste hinzu.

Das Ziel hier ist, die Liste der verifizierten Domäne grundsätzlich anzuzeigen und die richtige Aktion als Radioboxen zu geben (registrieren Sie, wenn es frei ist, übertragen Sie andernfalls oder verweisen Sie direkt auf die Domäne).

Also im Grunde überprüfe ich die Verfügbarkeit und dann ein Literal-Steuerelement in einem Platzhalter hinzufügen.

Das Problem damit ist der Viewstate (wenn ich vorwärts und rückwärts gehe, verliere ich die Entscheidungen, die ich mit den Domains getroffen habe).

die html:

(...) 
     <asp:MultiView ID="mvFlow" runat="server" ActiveViewIndex="0"> 
      <asp:View ID="vDomain" runat="server" onactivate="vDomain_Activate"> 

       <asp:TextBox ID="txtDomain" runat="server" style="margin-bottom: 0px" 
        Width="254px"></asp:TextBox> 
        &nbsp;<asp:Button ID="domainAdd" runat="server" onclick="domainAdd_Click" 
        style="height: 26px" Text="Ajouter" /> 
       &nbsp;<br /> 
       <br /> 
       <asp:PlaceHolder ID="phDomainResults" runat="server"></asp:PlaceHolder> 
       <br /> 
       <br /> 
       <asp:LinkButton ID="lbDomainSkip" runat="server" onclick="lbDomainSkip_Click">Prochaine 
       étape »</asp:LinkButton> 

      </asp:View> 
(...) 

dahinter ist im Grunde so etwas wie dieses:

lt.Text =

    "<dl>" + 
         "<dt><strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span></dt>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='register' /> Register</dd>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='transfert' disabled='disabled' /> Transfert</dd>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='point' /> Point</dd>" + 
        "</dl>"; 

Es muss möglich sein, die Dinge logisch und einfach zu machen?

Nach Vorschlag, den ich tat dies:

LiteralControl lt = new LiteralControl(); 
RadioButtonList rl = new RadioButtonList(); 

lt.Text = "<strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span>"; 
rl.Items.Add(new ListItem { Enabled = true, Selected = true, Text = "Enregistrement", Value = "register" }); 
rl.Items.Add(new ListItem { Enabled = false, Selected = false, Text = "Transfert", Value = "transfert" }); 
rl.Items.Add(new ListItem { Enabled = true, Selected = false, Text = "Pointer moi même", Value = "point" }); 
//phDomainResults is a PlaceHolder in the page 
phDomainResults.Controls.Add(lt); 
phDomainResults.Controls.Add(rl); 

Scheint nicht mehr zu arbeiten ...

Antwort

0

Wenn Notwendigkeit Ansichtszustand zu verwenden, dann sind Sie richtig, können Sie nicht eine wörtliche verwenden. (Oder genauer gesagt könnte man, aber es wäre ziemlich mühsam sein.

Sie sollen wahrscheinlich ein Asp Radiobuttonlist-Element on the fly erzeugen und dass Halter zu Ihrem Platz hinzufügen. Ihre Seite in der Lage, die Radiobuttonlist in Ansichtszustand zu erinnern.

+0

Versucht, scheint nicht die Liste selbst zu speichern .. – Erick

0

Ich würde die relevanten Informationen in der ViewState-Sammlung in Ihrem Code hinter und auf jeder Seite laden, löschen Sie die Platzhalter Werte und neu rendern und fügen Sie die Literale, so wie Sie jetzt sind, auf diese Weise müssen Sie sich keine Sorgen machen mit dem, was ASP.Net speichert und nicht speichert

1

ASP.NET speichert den Ansichtszustand ganz gut: es bewahrt den Inhalt des Literals, so wie es sein sollte , der Inhalt des Literals ist nur das Markup (das <dl> mit den Optionsschaltflächen), nicht was der Benutzer mit diesen Schaltflächen getan haben könnte.

Da Sie die Optionsfelder dynamisch zum HTML hinzufügen, "kennt" die ASP.NET-Seite diese nicht.

Anstatt Radiobuttons in einem Literal-Steuerelement auszuspucken, könnten Sie stattdessen versuchen, eine RadioButtonList zu verwenden.

+0

Scheint nicht zu funktionieren, wenn ich zurück gehe, die RadioButtonList verschwunden sind. – Erick