2010-09-09 18 views
0

J'ai ce codepuis-je utiliser une variable de session comme le texte d'un listitem dans une liste de radiobutton?

<asp:RadioButtonList ID="rblSplitWeek" runat="server"> 
        <asp:ListItem selected="true">No Choice</asp:ListItem> 
        <asp:ListItem Text = "First" Value = "Session('s_price_1')"></asp:ListItem> 
    <asp:ListItem Text = "Second"></asp:ListItem> 
    </asp:RadioButtonList> 

Mais continue à obtenir une erreur en essayant de mettre la variable de session dans

Un grand merci

Jamie

Répondre

2

Malheureusement, les données syntaxe de liaison (<%# %>) est pas pris en charge dans ce contexte, et la syntaxe de liaison littérale (<%= %> ou <%: %>) ne produit pas les résultats souhaités lors de l'affectation de valeurs à les contrôles du serveur.

Voici quelques approches alternatives:

1. se lier à une source de données:

Si vous avez créé une collection d'objets contenant du texte et de la valeur, vous pouvez facilement définir la source de données, DataTextField, et les propriétés DataValueField de la liste des boutons radio. Étant donné que la source de données serait renseignée dans code-behind, l'accès aux variables de session est trivial.

Par exemple, dans le balisage:

<asp:RadioButtonList ID="rblSplitWeek" runat="server" 
    DataTextField="Text" 
    DataValueField="Value" /> 

Et dans le code-behind:

public class RadioValue 
{ 
    public string Text { get; set; } 
    public string Value { get; set; } 
} 

// ... 

var values = new RadioValue[] 
{ 
    new RadioValue { Text = "No Choice" }, 
    new RadioValue { Text = "First", Value = Session["s_price_1"].ToString() }, 
    new RadioValue { Text = "Second" } 
} 
rblSplitWeek.DataSource = values; 
rblSplitWeek.DataBind(); 

2. Attribuez la valeur du code-behind

Si vous déclarez la liste élément avec du texte mais sans valeur, vous pouvez définir la valeur à partir du script.

Par exemple, dans le balisage:

<asp:RadioButtonList ID="rblSplitWeek" runat="server"> 
    <asp:ListItem selected="true">No Choice</asp:ListItem> 
    <asp:ListItem Text = "First" /> 
    <asp:ListItem Text = "Second" /> 
</asp:RadioButtonList> 

Et dans le code-behind:

rblSplitWeek.Items.FindByText("First").Value = Session["s_price_1"].ToString(); 
0

Je sais que c'est bien tard, mais une autre alternative consiste à charger la propriété SelectedIndex du RadioButtonList dans le PageLoad() un événement. Ensuite, vous n'avez pas à avoir une petite classe RadioValue - ce qui est bien sûr, bien sûr. Voici comment je l'ai fait la dernière fois ... et oui j'ai utilisé aussi la voie de la classe RadioValue .... mais ici il utilise votre radiobuttonlist sans la classe RadioValue:

protected void Page_Load(object sender, EventArgs e) 
    { 
     //Reload the last radio button selected. 
     if (Session["rblSplitWeekIndex"] != null) 
     { 
      rblSplitWeek.SelectedIndex = ((int)Session["rblSplitWeekIndex"]); 
     } 

...

Je sauvegarde mon index de liste de boutons radio dans une page MasterPage qui contient une liste de boutons radio d'étendue de recherche et une zone de texte de recherche. Donc, comme une MasterPage a tué ma liste de boutons radio (et aussi le texte qui n'est pas affiché ici), j'ai dû le charger en cas de besoin. J'espère que cela t'aides!