Member 13658833 Ответов: 1

Как получить значение переключателя checked, присутствующее в элементах управления ретранслятором при нажатии кнопки submit в ASP.NET, с#


на странице front end я использую управление ретранслятором для печати большого количества радиостанций мой передний конец
<asp:Repeater ID="QuestionRepeater" runat="server" >
               <HeaderTemplate>
                   <table>
               </HeaderTemplate>
               <SeparatorTemplate>
                   <tr>
                       <td>
                           <br />
                       </td>
                   </tr>
               </SeparatorTemplate>
               <ItemTemplate>
                   <tr>
                       <td>
                          <%#Eval("Question1") %>
                       </td>
                   </tr>
                   <tr>
                       <td>
                           <asp:RadioButton runat="server" ID="rb1" GroupName="Rb_Choice" Text='<%#Eval("Choice_1") %>' Checked="false" OnCheckedChanged="CheckChanged"></asp:RadioButton>
                       </td>
                   </tr>
                   <tr>
                       <td>
                           <asp:RadioButton runat="server" ID="rb2" GroupName="Rb_Choice" Text='<%#Eval("Choice_2") %>' OnCheckedChanged="CheckChanged"></asp:RadioButton>
                       </td>
                   </tr>
                   <tr>
                       <td>
                           <asp:RadioButton runat="server" ID="rb3" GroupName="Rb_Choice" Text='<%#Eval("Choice_3") %>' OnCheckedChanged="CheckChanged"></asp:RadioButton>
                       </td>
                   </tr>
                   <tr>
                       <td>
                           <asp:RadioButton runat="server" ID="rb4" GroupName="Rb_Choice" Text='<%#Eval("Choice_4") %>' OnCheckedChanged="CheckChanged"></asp:RadioButton>
                       </td>
                   </tr>
               </ItemTemplate>
               <FooterTemplate>
                   </table>
               </FooterTemplate>
           </asp:Repeater>

и я хочу узнать в back end page переключатель проверил значение

Что я уже пробовал:

моей задней части я просто отображать сообщение коробки для радио проверяется или не нравится
protected void Get_Answers(object sender, EventArgs e)
       {
           //var text = "Your Answers will be submitted successfully";
           //Response.Write(text);
           foreach (RepeaterItem item in QuestionRepeater.Items)
           {
               RadioButton rb1 = (RadioButton)item.FindControl("rb1");
               //Response.Write(rb1.GroupName+"<br>");
               RadioButton rb2 = (RadioButton)item.FindControl("rb2");
               RadioButton rb3 = (RadioButton)item.FindControl("rb3");
               RadioButton rb4 = (RadioButton)item.FindControl("rb4");
               ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "msg", "alert('"+ rb1.Text + ":" + rb1.Checked + rb2.Text + ":" + rb2.Checked + rb3.Text + ":" + rb3.Checked + rb4.Text + ":" + rb4.Checked + "')", true);

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

1 Ответов

Рейтинг:
6

F-ES Sitecore

Прежде всего убедитесь что вы не привязываете ретранслятор к обратной передаче иначе вы просто сбрасываете все значения в исходное состояние

if (!Page.IsPostBack)
{
    // bind your repeater here
}


Далее вы делаете только предупреждение js для последнего вопроса в ретрансляторе. Параметр "msg" в RegisterClientScriptBlock является ключом для этого блока скриптов, и ключи уникальны, поэтому, если у вас есть 5 вопросов, вы пытаетесь добавить 5 блоков скриптов под названием "msg", но поскольку msg-это ключ, .net будет использовать только последний, который вы настроили, поскольку каждый блок этого ключа заменяет предыдущие. Если вы хотите получить предупреждение на каждый вопрос, вам нужен уникальный ключ.

int i = 0;
foreach (RepeaterItem item in QuestionRepeater.Items)
{
    RadioButton rb1 = (RadioButton)item.FindControl("rb1");
    //Response.Write(rb1.GroupName+"<br>");
    RadioButton rb2 = (RadioButton)item.FindControl("rb2");
    RadioButton rb3 = (RadioButton)item.FindControl("rb3");
    RadioButton rb4 = (RadioButton)item.FindControl("rb4");
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "msg" + (i++).ToString(), "alert('" + rb1.Text + ":" + rb1.Checked + rb2.Text + ":" + rb2.Checked + rb3.Text + ":" + rb3.Checked + rb4.Text + ":" + rb4.Checked + "');", true);
}


Обратите внимание, что помимо уникального ключа я также добавил ";" после предупреждения.


Member 13658833

Большое вам спасибо, сэр, за ваш повтор.
сэр,облако, пожалуйста, объясните, как хранить проверенные значения переключателей в списке после нажатия кнопки отправки
я очень новичок в этом деле,поэтому, пожалуйста, объясните ясно, как описано выше
то, что я испытал в конце концов, это
охраняемых недействительными CheckChanged(объект отправителя, EventArgs в электронной)
{
строковое значение=null;
//на каждом проверенном элементе удалите все другие проверенные элементы
foreach (RepeaterItem item in QuestionRepeater.Предметы)
{
Переключатель рб1 = ((переключателей)пункт.FindControl("rb1"));
Переключатель рб2 = ((переключателей)пункт.FindControl("rb2"));
Переключатель рб3 = ((переключателей)пункт.FindControl("rb3"));
Переключатель rb4 = ((переключателей)пункт.FindControl("rb4"));
если (рб1.Проверено)
{
значение = rb1.Text;
}
остальное, если (рб2.Проверено)
{
значение = rb2.Text;
}
остальное, если (рб3.Проверено)
{
значение = rb3.Text;
}
остальное, если(rb4.Проверено)
{
значение = rb4.Text;
}
}

F-ES Sitecore

Проверенное событие не очень-то вам поможет. Определите класс, который может содержать ваши ответы, обычно он будет иметь идентификатор, показывающий, на какой вопрос он отвечает, и свойство для хранения выбранного ответа

публичный класс ответ
{
public int QuestionID { get; set; }
публичное строковое значение { get; set; }
}

затем в вашем событии submit пройдите по кнопкам и создайте список объектов ответа

List<Answer> answers = новый список<Answer>();

foreach (RepeaterItem item in QuestionRepeater.Предметы)
{
Переключатель рб1 = (переключатели)товара.FindControl("rb1");
Переключатель рб2 = (переключатели)товара.FindControl("rb2");
Переключатель рб3 = (переключатели)товара.FindControl("rb3");
Переключатель rb4 = (переключатели)товара.FindControl("rb4");

Ответ a = новый ответ();
a.QuestionID = 123; // сделайте это идентификатором вопроса, не знаю, как вы это определяете
если (рб1.Проверено)
{
а.Значение = рб1.Текст;
}
остальное, если (рб2.Проверено)
{
а.Значение = рб2.Текст;
}
остальное, если (рб3.Проверено)
{
а.Значение = рб3.Текст;
}
остальное, если (rb4.Проверено)
{
а.Значение = rb4.Текст;
}

ответы.Добавить(а);
}

Member 13658833

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