Лучший способ найти значение выбранной радиокнопки в группе радиокнопок (связанных с атрибутом GroupName) в ASP.NET - PullRequest
1 голос
/ 15 января 2020

Я работаю над извлечением значения выбранной радиокнопки из трех радиокнопок, имеющих общий атрибут GroupName. Мне нужно будет найти это значение с помощью кода C#, поскольку я использую шаблон MVP в своем приложении и передам это значение из кода позади докладчику.

В файле .aspx :

<table>
   <tr>
      <td style="width: 25px">
         <asp:Label ID="rmd" runat="server" Text="*" CssClass="RequiredField" />
      </td>
      <td align="left" style="width: 350px">
         <asp:Label ID="rmd2" runat="server" Text="Raw material dimensions (width, length, thickness)" CssClass="FieldHeader"></asp:Label>
      </td>
      <td valign="bottom">
         <asp:RadioButton ID="rbRawMaterialDimensions" runat="server" TextAlign="Left" CssClass="FieldHeader"
                                GroupName="PlatesManufacturedInHouse" />
      </td>
   </tr>
   <tr>
      <td style="width: 25px">
         <asp:Label ID="hpn" runat="server" Text="*" CssClass="RequiredField" />
      </td>
      <td align="left" style="width: 350px">
         <asp:Label ID="hpn2" runat="server" Text="New HPN Created (main OR raw material item)" CssClass="FieldHeader"></asp:Label>
      </td>
      <td valign="bottom">
         <asp:RadioButton ID="rbNewHPN" runat="server" TextAlign="Left" CssClass="FieldHeader"
                                GroupName="PlatesManufacturedInHouse" />
      </td>
   </tr>
   <tr>
      <td style="width: 25px">
         <asp:Label ID="na" runat="server" Text="*" CssClass="RequiredField" />
      </td>
      <td align="left" style="width: 350px">
         <asp:Label ID="na2" runat="server" Text="Not Applicable" CssClass="FieldHeader"></asp:Label>
      </td>
      <td valign="bottom">
         <asp:RadioButton ID="rbNotApplicable" runat="server" TextAlign="Left" CssClass="FieldHeader"
                                GroupName="PlatesManufacturedInHouse" />
      </td>
   </tr>
   <tr>
         <asp:Label ID="Label24" runat="server" Text="Required Field Missing: An item classification is required."
                                TextAlign="Left" CssClass="Warning" Visible="False" />
   </tr>
</table>

Я пытался использовать тег <asp:RadioButtonList>, но, поскольку мне нужно включить метки для каждой кнопки (а также добавить проверку в будущем), кажется, что использование атрибута GroupName На данный момент это лучшее решение, насколько я прочитал в Интернете.

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

Я не понимаю, что означает ответ на вопрос, когда он говорит:

где radioButtonsContainer - контейнер радиокнопок

Я создал тег <asp:Panel ID="PanelPlatesManufacturedInHouse" runat="server" CssClass="outercontainer">, окружающий три переключателя, но я не уверен, что это правильный способ использования Контейнер.

Я, кажется, застрял в моей реализации сейчас, если кто-нибудь знает лучший способ go вперед с этим, я был бы признателен за помощь:)!

Спасибо за чтение!

1 Ответ

1 голос
/ 15 января 2020

Вы можете присвоить своей таблице класс или ID, и l oop все радиокнопки в этой таблице, чтобы найти значение.

Итак, добавьте ID

<table id="myTable">

Затем найди правильное значение

<script>
    function findRadioValue() {
        $('#myTable input[type=radio]').each(function () {
            if ($(this).prop('checked')) {
                alert($(this).val());
            }
        });
    }
</script>

Обновление

Я как-то хоть и был jQuery, мой плохой. Но я создал метод для получения правильного идентификатора элемента управления на основе GroupName. Обратите внимание, что для этого используется мастер-страница. Если вы его не используете, вы используете foreach (var control in Page.Controls)

public string getRadioButtonIdByGroupName(string groupName)
{
    //loop all controls on the page
    foreach (var control in (Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder).Controls)
    {
        //check if the control is a radiobutton
        if (control is RadioButton)
        {
            //cast the control to a radiobutton
            var radioButton = control as RadioButton;

            //check if it is the correct group name and if it's checked
            if (radioButton.GroupName == groupName && radioButton.Checked)
            {
                //return the value
                return radioButton.ID;
            }
        }
    }

    return "NotFound";
}
...