Могу ли я использовать переменную сеанса в качестве текста элемента списка в списке радиокнопок? - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть этот код

<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>

Но продолжаю появляться сообщение об ошибке при попытке поместить переменную сеанса в

Большое спасибо

Джейми

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

К сожалению, синтаксис привязки данных (<%# %>) в этом контексте не поддерживается, а синтаксис литеральной привязки (<%= %> или <%: %>) не дает желаемых результатов при назначении значений серверным элементам управления.

Вот несколько альтернативных подходов:

1.Привязка к источнику данных:

Если вы создали коллекцию объектов, содержащих текст и значение, вы можете легко установить свойства DataSource, DataTextField и DataValueField в списке переключателей.Поскольку источник данных будет заполняться кодом, доступ к переменным сеанса тривиален.

Например, в разметке:

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

И в коде позади:

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.Назначьте значение из выделенного кода

Если вы объявите элемент списка с текстом, но без значения , вы можете установить значение из сценария.

Например,в разметке:

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

и в коде позади:

rblSplitWeek.Items.FindByText("First").Value = Session["s_price_1"].ToString();
0 голосов
/ 28 января 2014

Я знаю, что это слишком поздно, но другой альтернативой является загрузка свойства SelectedIndex RadioButtonList в событии PageLoad (). Тогда вам не нужно иметь маленький класс RadioValue - что, конечно, хорошо. Вот как я это делал в прошлый раз ... и да, я тоже использовал класс RadioValue .... но здесь он использует ваш radiobuttonlist без класса RadioValue:

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

...

Я сохраняю индекс выбранного списка переключателей в главной странице, которая содержит список переключателей области поиска и текстовое поле поиска. Поэтому, поскольку MasterPage убил мой список переключателей (а также текст, который здесь не показан), мне пришлось загружать его при необходимости. Надеюсь, это поможет!

...