2012-05-29 1 views
0

Я создаю форму в ASP.Net для тиражирования бумажной формы (я не имею права в дизайне, мне поручено просто воссоздавая его в цифровом виде). В этой форме есть много вопросов в соответствии с ответом «Ответ да или нет». Если да, укажите, сколько ». Я сейчас обрабатываю его, перечисляя вопрос, а затем имея две радиообъекты в группе, один из которых говорит «да» и один «нет». Чтобы сделать это немного красивее, я использовал панели обновления Ajax, которые будут отображать только текстовое поле, чтобы сохранить это значение да, если пользователь выбирает «Да».Как обрабатывать многие «да/нет, если да <отображать текстовое поле>» в форме

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

Protected Sub rdoShowOriginalEquipment(ByVal sender As Object, ByVal e As System.EventArgs) 
    If rdoOEYes.Checked = True Then 
     pnlOriginalEquipment.Visible = True 
    ElseIf rdoOENo.Checked = True Then 
     pnlOriginalEquipment.Visible = False 
    End If 
End Sub 

И так далее для каждого вопроса, у которого есть опция yes/no. Я не сомневаюсь, что есть лучший способ сделать это. Мне было интересно, если есть способ, которым я мог пройти панель, связанную с группой RadioButton, так что я мог бы использовать один метод в коде, который бы огонь для всех RadioButton постбэков, что-то вроде (не реальный код)

Protected Sub showPanel(RadioButtonGroup, panel) 
    If rdoYes.Checked = True Then 
     panel.Visible = True 
    ElseIf rdoNo.Checked = True Then 
     panel.Visible = False 
    End If 
End Sub 

Или есть лучший способ справиться с такими вопросами? Я открыт для другого подхода, если он сократит количество избыточного кода, который я набираю сейчас. Я использую VB, но я знаю C#, поэтому, если кто-то свободно говорит с этим ответом, у меня нет проблем с его интерпретацией.

Любая помощь очень ценится.

ответ

1

Вот рабочий код:

<asp:Panel ID="Question1" runat="server"> 
    <asp:RadioButton GroupName="Q1" runat="server" ID="Q1Yes" Text="Yes" OnCheckedChanged="AnswerChanged" AutoPostBack="true" /> 
    <asp:RadioButton GroupName="Q1" runat="server" ID="Q1No" Text="No" OnCheckedChanged="AnswerChanged" AutoPostBack="true" /> 
    <asp:Panel runat="server" ID="Q1Panel">Some text here</asp:Panel> 
</asp:Panel> 

<asp:Panel ID="Question2" runat="server"> 
    <asp:RadioButton GroupName="Q2" runat="server" ID="Q2Yes" Text="Yes" OnCheckedChanged="AnswerChanged" AutoPostBack="true" /> 
    <asp:RadioButton GroupName="Q2" runat="server" ID="Q2No" Text="No" OnCheckedChanged="AnswerChanged" AutoPostBack="true" /> 
    <asp:Panel runat="server" ID="Q2Panel">Some text here</asp:Panel> 
</asp:Panel> 

Обратите внимание, что все радио кнопки имеют один и тот же обработчик для OnCheckedChanged и имеют AutoPostBack = True

Вы можете поставить UpdatePanel, где необходимо

// Код позади:

protected void AnswerChanged(object sender, EventArgs e) 
{ 
    RadioButton rbAnswer = (RadioButton)sender; 
    if (rbAnswer.Checked) 
    { 
     string panelID = rbAnswer.GroupName + "Panel"; 
     if (rbAnswer.Text == "Yes") 
       rbAnswer.Parent.FindControl(panelID).Visible = true; 
     else 
       rbAnswer.Parent.FindControl(panelID).Visible = false; 
    } 
} 

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

Happy Code

+0

Удивительно, большое вам спасибо за помощь. – JMill

Смежные вопросы