Всегда выбран верхний (условный) переключатель

#c# #asp.net #radio-button #selected

#c# #asp.net #переключатель #выбран

Вопрос:

В настоящее время я передаю некоторые значения в один из моих файлов ascx.cs, и он отображает определенные переключатели в зависимости от передаваемого значения. Переключатели создаются в формате .ascx:

 <asp:RadioButton ID="length5yr" GroupName="SubLength" runat="server" Visible ="false"
             /> 
            <asp:label runat="server" id="Label5yr" Visible="false" style="width: 300px">
            </asp:label>


             <asp:RadioButton ID="length3yr" GroupName="SubLength" runat="server"  Visible ="false"
             />
            <asp:label runat="server" id="Label3yr" Visible="false" style="width: 300px">
            </asp:label>


     <asp:RadioButton ID="length2yr" GroupName="SubLength" runat="server"  Visible ="false"
             />
            <asp:label runat="server" id="Labelyr2" Visible="false" style="width: 300px">
            </asp:label>


     <asp:RadioButton ID="length1yr" GroupName="SubLength" runat="server"  Visible ="false"
             />
            <asp:label runat="server" id="Label1yr" Visible="false" style="width: 300px">

            </asp:label>

     <asp:RadioButton ID="lengthQuarterly" GroupName="SubLength" runat="server"  Visible ="false"
             />
            <asp:label runat="server" id="labelQuarterly" Visible="false" style="width: 300px">
            </asp:label>

    <asp:RadioButton ID="lengthMonthly" GroupName="SubLength" runat="server"  Visible ="false"
             />
            <asp:label runat="server" id="labelMonthly" Visible="false" style="width: 300px">
            </asp:label>
  

Я хочу, чтобы был отмечен любой переключатель, который в конечном итоге будет отображаться первым / верхним. Мне удалось установить флажок последнего переключателя (что в любом случае также вызывает у меня другие проблемы) — но как я могу установить флажок для этого верхнего переключателя!?

Это код для определения того, какой переключатель отображается — я показал только один из вариантов, просто чтобы сделать код немного более удобным для чтения.

  foreach (Dictionary<string, string> d in orderOptions)
        {
            if (d["length"] == "one")
            {
                length1yr.Visible = true;
                price1yr = d["price"];
                rate1yr = d["rate"];
                issues1yr = d["issues"];
                premium1yr = d["premium"];
                Label1yr.Text = d["description"]   "<br><br>";
                Label1yr.Visible = true;
                SubLength1yr = "1 year";

            }
  

Комментарии:

1. Как вы создаете переключатели? Динамически или они все всегда есть и просто скрыты на основе некоторых критериев?

2. АХ, они всегда там и просто скрыты на основе критериев.

3. Вам нужно решение на стороне сервера или клиента? Или это не имеет значения?

4. Я не думаю, что это действительно имеет слишком большое значение — пока это выполняет свою работу, и я получаю что-то от этого, я согласен с решением.

5. Можете ли вы обновить вопрос, включив в него HTML-код, который он выдает, а также код, который вы используете, чтобы определить, какие переключатели показывать?

Ответ №1:

Для решения на стороне сервера самым простым было бы перебрать список RadioButton и использовать какой-нибудь простой LINQ для выбора первой видимой кнопки.

Что-то вроде:

 var buttons = new []{length5yr, ...};
var firstVisibleButton = buttons.Where(b=>b.Visible).First();
firstVisibleButton.Checked = true;
  

Вероятно, вышесказанное является скорее псевдокодом, чем чем-либо еще, но без полного примера кода это все, что я могу сделать. Я уверен, что вы можете разобраться в деталях. Приведенный выше код должен был бы выполняться после того, как вы скрыли / показали RadioButton .

Вероятно, мне следует указать, что создаваемый вами список (кнопки) должен соответствовать порядку отображения кнопок, чтобы это работало должным образом.

Комментарии:

1. Проблема с этим заключается в том, что когда я выбираю что-то под первым переключателем, оно не передает правильные данные на следующую страницу :/ Он всегда передает данные, прикрепленные к отображаемому «первому» переключателю.

2. О каких данных мы здесь говорим?

3. Неопределенный — я знаю. Существует метод, который запускается, когда кто-то нажимает кнопку «Отправить», которая находится на той же странице, что и эти переключатели. В зависимости от того, какой переключатель выбран, он передает определенную информацию. Итак, когда кнопка нажата, если radiobutton1.установлен флажок, она устанавливает определенные значения для переменных x, y и z, и именно они в конечном итоге передаются. если установлен флажок radiobutton2., эти значения будут другими. В этом случае переключатель 2 (например) установлен, но он передает значения так, как если бы переключатель 1 все еще был выбран.

4. Я немного устал от ASP.net но, похоже, что вы выполняете часть этой работы «слишком рано» в цикле страницы ASP, и состояние просмотра кнопок еще не было применено или что-то в этом роде. Если вам нужна дополнительная помощь здесь, возможно, вам придется опубликовать небольшой пример кода с большим количеством кода (не используйте свой реальный код). Создание этого меньшего примера кода также может помочь вам разобраться в этом, попробовав меньшую область видимости.